GradientLayer 在 iOS Swift App 中移动到左上角

GradientLayer shifted to the top left in 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 故事板预览中,一切看起来都符合要求,但在模拟器中,背景移到了左上角,如下面的屏幕截图所示。

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

谢谢。

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

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

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

gradientLayer.frame = self.bounds

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