在iPhone 6s上错放了CAGradientLayer

我有几个带有彩色背景的CAGradientLayers ,我在下面添加了CAGradientLayers

 CAGradientLayer * gradientLayer = [CAGradientLayer layer]; gradientLayer.colors = [NSArray arrayWithObjects: (id) [UIColor colorWithWhite:1 alpha:0.3].CGColor, (id) [UIColor colorWithWhite:0.5 alpha:0.3].CGColor, nil]; gradientLayer.frame = label.bounds; gradientLayer.cornerRadius = label.layer.cornerRadius; [label.layer insertSublayer:gradientLayer atIndex:0]; 

在iPhone 4和iPhone 5s上它看起来很完美,但在iPhone 6s上, CAGradientLayers水平错位,如下面的屏幕截图所示。

在此处输入图像描述

UIButtons也会出现此问题。

我正在运行iOS 9.3。

你需要的是处理autolayout约束。 这个swift代码代表了您在viewDidLayoutSubviews方法中需要做的事情:

 class ViewController: UIViewController { @IBOutlet weak var button: UIButton! let gradientLayer = CAGradientLayer() override func viewDidLoad() { super.viewDidLoad() gradientLayer.colors = [UIColor(white: 1, alpha: 0.3).CGColor, UIColor(white: 0.5, alpha: 0.3).CGColor] gradientLayer.frame = button.bounds gradientLayer.cornerRadius = button.layer.cornerRadius button.layer.insertSublayer(gradientLayer, atIndex: 0) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() gradientLayer.frame = button.bounds } }