This question already has an answer here:
Constraints not updating with device orientation change
(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)

我得到的结果是:
ios - 在横向模式下,背景色仅出现在屏幕的一半-LMLPHP

最佳答案

这是一个常见的错误。当视图以横向模式布局时,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