如何在导航栏中添加渐变 - iOS

时间:2017-11-24 12:27:51

标签: ios objective-c uinavigationbar gradient

我已经研究过如何在iOS中的NavigationBar中添加渐变,但它没有显示我需要的东西。我希望在TOP上使用WHITE的2色渐变,在BOTTOM上使用CLEAR。像这样 : enter image description here

尝试使用CAGradientLayerCRGradientNavigationBar, 但我尝试过的所有内容总是在TOP上显示White,但是当我将底色设置为CLEAR时,它显示出一种奇怪的黑色半透明颜色。

如上图所示,如何实现类似的NavigationBar?

谢谢!

3 个答案:

答案 0 :(得分:1)

创建渐变图层并将其添加为导航栏的背景。

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = self.navigationController.navigationBar.bounds;

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];

[self.navigationController.navigationBar setBackgroundImage:[self imageFromLayer:gradient] forBarMetrics:UIBarMetricsDefault];

用于从图层创建图像。

(UIImage *)imageFromLayer:(CALayer *)layer
{
    UIGraphicsBeginImageContext([layer frame].size);

    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return outputImage;
}

还有一件事,github中有一个库:CRGradientNavigationBar你也可以使用这个库。

答案 1 :(得分:1)

知道了!来自this链接。实际上clearColor有一个黑色通道,其alpha值为0,所以改为使用

[UIColor colorWithWhite:1 alpha:0]

它会完成这项工作!谢谢!

答案 2 :(得分:0)

您可以尝试使用顶部约束-70在屏幕顶部创建一个UIView,并在其中添加CAGradientLayer。 然后通过添加UIImage()//空图像使您的导航栏透明,作为背景,这样它将在背景中显示具有等级CAGradientLayer的UIView