Just been moved to Xcode8 and iOS10, providing support for iOS10 to one of the application.
Figure out weird issue, suddenly Gradient is not working.
I found that after applying Storyboard (Storyboard changes in Xcode8) changes gradient not visible to views.
Xcode 7.3 - Gradient Views -
Xcode 8 - Gradient Views -
Also, If I replace Storyboard with old storyboard it shows gradient, So there is something wrong with new Storyboard.
There is no change in code:
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];
The problem is that there has been a change in the timing of layout. Therefore your code is now running too soon. You are saying
gradient.frame = view.bounds
But at this moment, view has zero bounds. So gradient has zero frame! That is why you cannot see it. You are doing layout code in
viewDidLoad. This was always wrong and now you see why.
Move your code to
viewDidLayoutSubviews. At that time, view has it real bounds. You will have to use a condition so that your code only runs once.