如何为我的iOS导航栏创build水平渐变背景?
我知道如何设置一个导航栏背景颜色(与barTintColor),但现在我正在iOS应用程序,要求水平渐变(不是典型的垂直渐变)。
我如何创build一个水平渐变背景的导航栏?
如果你想以编程方式设置给定的UINavigationBar的渐变我有你的解决scheme。
首先用你想要的颜色和位置设置一个CAGradientLayer
。
CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = navigationBar.bounds; gradientLayer.colors = @[ (__bridge id)[UIColor greenColor].CGColor, (__bridge id)[UIColor blueColor].CGColor ]; gradientLayer.startPoint = CGPointMake(0.0, 0.5); gradientLayer.endPoint = CGPointMake(1.0, 0.5);
然后抓取该图层的UImage。
UIGraphicsBeginImageContext(gradientLayer.bounds.size); [gradientLayer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
将gradientImage
设置为UINavigationBar
的backgroundImage。
[navigationBar setBackgroundImage:gradientImage forBarMetrics:UIBarMetricsDefault];
Swift解决scheme:
[![// Setup the gradient let gradientLayer = CAGradientLayer() gradientLayer.frame = navigationBar.bounds gradientLayer.colors = [UIColor.greenColor().CGColor, UIColor.blueColor().CGColor] gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5) gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) // Render the gradient to UIImage UIGraphicsBeginImageContext(gradientLayer.bounds.size) gradientLayer.renderInContext(UIGraphicsGetCurrentContext()) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() // Set the UIImage as background property navigationBar.setBackgroundImage(image, forBarMetrics: UIBarMetrics.Default)
更新了iOS 10 / swift 3.0的@JulianM答案:
let gradientLayer = CAGradientLayer() var updatedFrame = self.navigationController!.navigationBar.bounds updatedFrame.size.height += 20 gradientLayer.frame = updatedFrame gradientLayer.colors = [UIColor.green.cgColor, UIColor.blue.cgColor] gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5) gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) UIGraphicsBeginImageContext(gradientLayer.bounds.size) gradientLayer.render(in: UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() self.navigationController!.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
你可以使用这个:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"gardientImage"] forBarMetrics:UIBarMetricsDefault];
对于ios 7导航栏的高度是64px