This question already has an answer here:
Constraints not updating with device orientation change
(1个答案)
去年关门了。
我正在建立一个示例登录页面。一切正常,但当我在设备上以横向模式运行项目时,背景色只覆盖了屏幕的一半。我搜索了谷歌。我找到了一个匹配的答案,但不起作用。
这是我的背景色代码:
我得到的结果是:
(1个答案)
去年关门了。
我正在建立一个示例登录页面。一切正常,但当我在设备上以横向模式运行项目时,背景色只覆盖了屏幕的一半。我搜索了谷歌。我找到了一个匹配的答案,但不起作用。
这是我的背景色代码:
let topColor = UIColor(red: 254/255.0, green: 81/255.0, blue: 150/255.0, alpha: 1)
let bottomColor = UIColor(red: 247/255.0, green: 112/255.0, blue: 98/255.0, alpha: 1.0)
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]
gradientLayer.frame = self.view.bounds
self.view.layer.insertSublayer(gradientLayer, at: 0)
我得到的结果是:
最佳答案
这是一个常见的错误。当视图以横向模式布局时,gradientLayer的frame
不会更新。你必须手动操作。
解决方案
请确保创建gradientLayer
并仅将其作为子层插入一次(例如,在viewDidLoad
中)。保持gradientLayer
作为viewController
的实例属性,以便您可以访问它。
然后覆盖layoutSubviews
并刷新gradientLayer
的帧:
override func layoutSubviews() {
super.layoutSubviews()
// at this self.view has updated its layout, so now you can update gradientLayer's frame
gradientLayer.frame = self.view.bounds
}
10-01 20:25