iOS10 + 梯度停止工作

iOS10 + Gradient stop working

刚刚移至 Xcode8 和 iOS10,为其中一个应用程序提供对 iOS10 的支持。

找出奇怪的问题,突然渐变不起作用。

我发现应用 Storyboard 后(Storyboard 在 Xcode8 中发生变化)更改视图不可见的渐变。

Xcode 7.3 - 渐变视图 -

Xcode 8 - 渐变视图 -

此外,如果我用旧故事板替换故事板,它会显示渐变,所以新故事板有问题。

代码没有变化:

[view setOpaque:NO];
view.layer.cornerRadius = 45;
view.backgroundColor = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;

UIColor *color1 = [UIColor colorWithRed:33.0/255.0 green:39.0/255.0 blue:46.0/255.0 alpha:1.0];
UIColor *color2 = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];
UIColor *color3 = [UIColor colorWithRed:14.0/255.0 green:20.0/255.0 blue:26.0/255.0 alpha:1.0];

NSArray *colorsArray = @[(id)color1.CGColor, (id)color2.CGColor, (id)color3.CGColor];

gradient.colors = colorsArray;
[gradient setLocations:@[@0.0, @0.35]];
[view.layer insertSublayer:gradient atIndex:0];

如果有人弄明白了,请告诉我。

编辑:

我没有创建新的 Storyboard,我只是按照 Xcode8

的建议应用了以下更改

问题是布局的时间发生了变化。因此,您的代码现在 运行 太早了。你是说

gradient.frame = view.bounds

但此时,视图的边界为零。所以渐变有零帧!这就是为什么你看不到它。您正在 viewDidLoad 中编写布局代码。这总是错误的,现在你明白为什么了。

将您的代码移至 viewDidLayoutSubviews。那时,视图有其真正的界限。您将不得不使用一个条件,以便您的代码只运行一次。