【发布时间】:2020-11-10 14:43:16
【问题描述】:
我使用以下代码添加了一个 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 预览中,一切看起来都如您所愿,但在模拟器中,背景移动到左上角,如下图所示。
如果有人能告诉我这里发生了什么,那就太好了。
谢谢。
【问题讨论】:
-
与 CALayer 相同的问题和错误的大小。当
sharedInit被调用时,你还没有真正的大小。尚未应用自动布局。此外,gradientLayer.frame = self.frame你应该始终使用self.bounds:gradientLayer.frame = self.bounds。 -
谢谢,不知道大小的提示有所帮助。我在 layoutSubview 函数中移动了代码,现在它可以工作了。
标签: ios swift xcode cagradientlayer