背景颜色仅在横向模式下显示在屏幕的一半上

时间:2018-01-21 17:30:42

标签: ios swift calayer

我正在构建一个示例登录页面。一切正常,但是当我在横向模式下在设备上运行项目时,背景颜色仅覆盖屏幕的一半。我搜索了谷歌。我找到了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)

结果我得到了:

enter image description here

1 个答案:

答案 0 :(得分:2)

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