簡體   English   中英

CAGradientLayer 不適用於以編程方式創建的 UI 中的完整視圖

[英]CAGradientLayer not applying to the full view in programmatically created UI

我正在開發一個以編程方式創建所有 UI 的 iOS 項目。 不是故事板。

我想向 UIViewController 的 UIView 的背景添加漸變。

我創建了以下擴展方法。

extension UIView {
    
    func addGradient(colors: [UIColor]) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.bounds = bounds
        gradientLayer.colors = colors.map { $0.cgColor }
        layer.insertSublayer(gradientLayer, at: 0)
    }
    
}

我像這樣在 ViewController 的viewDidLoad中添加了漸變。

let topColor = UIColor(red: 0.28, green: 0.521, blue: 0.696, alpha: 1)
let bottomColor = UIColor(red: 0.575, green: 0.615, blue: 0.692, alpha: 1)
view.addGradient(colors: [topColor, bottomColor])

但是漸變並未應用於屏幕的整個寬度和高度。

在此處輸入圖片說明

我打印了視圖的邊界並顯示了這些值。

(0.0, 0.0, 375.0, 812.0)

所以我不確定為什么漸變仍然沒有覆蓋全視圖。

我正在開發一個以編程方式創建所有 UI 的 iOS 項目。 不是故事板。

我想向 UIViewController 的 UIView 的背景添加漸變。

我創建了以下擴展方法。

extension UIView {
    
    func addGradient(colors: [UIColor]) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.bounds = bounds
        gradientLayer.colors = colors.map { $0.cgColor }
        layer.insertSublayer(gradientLayer, at: 0)
    }
    
}

我像這樣在 ViewController 的viewDidLoad中添加了漸變。

let topColor = UIColor(red: 0.28, green: 0.521, blue: 0.696, alpha: 1)
let bottomColor = UIColor(red: 0.575, green: 0.615, blue: 0.692, alpha: 1)
view.addGradient(colors: [topColor, bottomColor])

但是漸變並未應用於屏幕的整個寬度和高度。

在此處輸入圖片說明

我打印出視圖的邊界並顯示這些值。

(0.0, 0.0, 375.0, 812.0)

所以我不確定為什么漸變仍然沒有覆蓋全視圖。

當我們向 Gradient 層框架添加視圖邊界時,我們必須更新 viewDidLayoutSubviews 中的框架。 它對我有用 以下對我有用

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    
    self.gradient.frame = containerView.bounds
}

containerView 是我設置漸變層的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM