【发布时间】:2016-08-31 17:42:25
【问题描述】:
我有几个带有彩色背景的UILabels,我向它们添加了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。
【问题讨论】:
-
该代码在您查看/查看控制器生命周期的哪个位置?
-
如果标签和按钮的框架发生变化,那么渐变层需要随之变化。例如,如果标签使用自动布局布局并且视图旋转,则需要更新渐变的框架。您可以在视图控制器上的
viewDidLayoutSubviews中执行此操作,或者将带有渐变的标签/按钮子类化并更新layoutSubviews中的渐变框架。 -
@beyowulf 代码在 viewDidLoad 方法中。
-
@keithbhunter 标签和按钮没有改变,这是一个仅限肖像的应用程序。
标签: ios objective-c iphone cagradientlayer