This question already has an answer here:
- Can't set CALayer's border color 1 answer
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 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];
Let me know if any one figured it out.
Edit:
I didn't created new Storyboard, I just applied below changes as suggested by Xcode8
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
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 its real bounds. You will have to use a condition so that your code only runs once.