CAGradientLayer不填充宽度

时间:2018-06-23 13:10:29

标签: ios swift user-interface

我对Swift比较陌生。我只是想设计出租车应用而已。

我发现了CGGradientLayer,并认为它将为应用程序的顶部栏带来不错的效果。

我添加了它,由于某种原因,它没有完全扩展到视图宽度。

这是我的子类:

import UIKit

class GradientView: UIView {

    let gradient = CAGradientLayer()

    override func awakeFromNib() {
        setupGradientView()
    }

    func setupGradientView() {
        gradient.frame = self.frame
        gradient.colors = [UIColor.white.cgColor, UIColor.init(white: 1.0, alpha: 0.0).cgColor]
        gradient.startPoint = CGPoint.zero
        gradient.endPoint = CGPoint(x: 0, y: 1)
        gradient.locations = [0.9, 1.0]
        self.layer.addSublayer(gradient)
    }
}

这就是结果。

绿色背景实际上是也应用子类的UIView的宽度。

enter image description here

1 个答案:

答案 0 :(得分:4)

您太早设置了渐变的frame。您应该在override的{​​{1}}中进行设置:

layoutSubviews

注意:

  • 您应该将渐变框设置为override func layoutSubviews() { super.layoutSubviews() gradient.frame = self.bounds } 。那就是视图内部使用的坐标系。相对于self.bounds放置渐变,并且如果GradientView放置在屏幕上的其他位置,则渐变不会更改(因为在这种情况下GradientView不会更改,但是{ {1}})。
  • 在首次创建视图时,自动版式尚未确定当前设备(或方向)的视图大小。通过在bounds中设置frame,您将始终获得视图大小的最新值。