CAGradientLayer不填充宽度

tal*_*123 1 user-interface ios swift

我对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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是结果。

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

在此处输入图片说明

vac*_*ama 5

frame太早设置了渐变的。您应将其设置overridelayoutSubviews

override func layoutSubviews() {
    super.layoutSubviews()
    gradient.frame = self.bounds
}
Run Code Online (Sandbox Code Playgroud)

笔记:

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