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

How to add gradient in navigation bar - iOS

关于如何在iOS中的NavigationBar中添加渐变,我研究了很多,但它没有显示我需要的东西。我想要 2 个颜色渐变,顶部为白色,底部为透明。像这样 :

尝试使用 CAGradientLayerCRGradientNavigationBar, 但是我尝试过的所有东西总是在顶部显示白色,但是当我将底部颜色设置为 CLEAR 时,它显示出一种奇怪的黑色半透明颜色。

如何实现类似上图的NavigationBar?

谢谢!

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

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 你也可以使用这个库。

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

[UIColor colorWithWhite:1 alpha:0]

它会完成工作!谢谢!

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