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
。那时,视图有其真正的界限。您将不得不使用一个条件,以便您的代码只运行一次。
刚刚移至 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
。那时,视图有其真正的界限。您将不得不使用一个条件,以便您的代码只运行一次。