刚刚转移到Xcode8和iOS10,为其中一个应用程序提供iOS10支持。
想出奇怪的问题,突然Gradient无法正常工作。
我发现应用Storyboard(Xcode8中的Storyboard更改)后,更改了视图不可见的渐变。
Xcode 7.3 - 渐变视图 -
Xcode 8 - 渐变视图 -
另外,如果我用旧故事板替换Storyboard,它会显示渐变,所以新的Storyboard出现了问题。
代码没有变化:
[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的建议应用了以下更改
答案 0 :(得分:1)
问题在于布局的时间发生了变化。因此,您的代码现在运行得太快了。你在说
gradient.frame = view.bounds
但此时此观点的界限为零。所以渐变有零帧!这就是为什么你看不到它。您正在viewDidLoad
中执行布局代码。这总是错的,现在你明白了为什么。
将代码移至viewDidLayoutSubviews
。那时,观点有其真正的界限。您必须使用条件,以便您的代码只运行一次。