先來看效果圖:

UIView的顏色漸變參考:http://www.itdecent.cn/p/05889da18b2d
在使用上述方式設(shè)置導(dǎo)航條顏色漸變的時候,會發(fā)現(xiàn)導(dǎo)航條的顏色是漸變了,但是標(biāo)題、左右按鈕全部看不見了。
self.navigationController.navigationBar.layer .addSublayer(gradientLayer)
這是因為在navigationBar上加了一層layer之后,把原來的標(biāo)題、左右按鈕全部覆蓋掉了,所以導(dǎo)致看不見。
那么如何來解決導(dǎo)航條顏色漸變的問題呢?
鏘鏘鏘~答案如下:
- (CALayer *)gradientBGLayerForBounds:(CGRect)bounds
{
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor yellowColor].CGColor];
gradientLayer.locations = @[@0, @1.0];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1.0, 0);
gradientLayer.frame = bounds;
return gradientLayer;
}
//設(shè)置導(dǎo)航條的背景為漸變色
- (void)updateNavigationBarBGColor
{
CALayer * bgLayer = [self gradientBGLayerForBounds:CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)];
UIGraphicsBeginImageContext(bgLayer.bounds.size);
[bgLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * bgAsImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (bgAsImage != nil)
{
[self.navigationController.navigationBar setBackgroundImage:bgAsImage forBarMetrics:UIBarMetricsDefault];
}
else
{
NSLog(@"Failded to create gradient bg image, user will see standard tint color gradient.");
}
}
其中CAGradientLayer中相關(guān)屬性說明參考:http://www.itdecent.cn/p/05889da18b2d