首页 > 解决方案 > GradientLayer 在 iOS Swift App 中移动到左上角

问题描述

我使用以下代码为我的视图添加了一个 GradientLayer 作为背景:

import UIKit

@IBDesignable class MainView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedInit()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedInit()
    }
    
    override func prepareForInterfaceBuilder() {
        sharedInit()
    }
    
    func sharedInit() {      
        let colorTop = UIColor.darkGray.cgColor
        let colorBottom = UIColor.lightGray.cgColor
        
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.frame
        gradientLayer.colors = [colorTop, colorBottom]
        self.layer.insertSublayer(gradientLayer, at: 0)
    }
}

在 Xcode Storyboard 预览中,一切看起来都如您所愿,但在模拟器中,背景移动到左上角,如下面的屏幕截图所示。

背景渐变

如果有人能告诉我这里发生了什么,那就太好了。

谢谢。

标签: iosswiftxcodecagradientlayer

解决方案


您应该转到“MainView”类中的“layoutSubviews”方法:-

override func layoutSubviews() {
       super.layoutSubviews()
       sharedInit()
}

另外,用以下代码替换“sharedInit”方法的“gradientLayer.frame = self.frame”行:-

gradientLayer.frame = self.bounds

正如我所检查的,这对我有用!


推荐阅读