在半透明导航栏上设置shadowImage

时间:2013-10-03 20:05:45

标签: iphone ios ios7

我正在尝试在我的app delegate中设置navigaion bar的shadowImage:

[[UINavigationBar appearance]setShadowImage:[UIImage imageNamed:@"navigation-bar-shadow"]];

这本身不起作用。它只适用于我设置导航栏的背景图像:

[[UINavigationBar appearance]setBackgroundImage:[UIImage new]forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

这是我的问题...导航栏是半透明的,我想保持这种方式(没有背景图像)。但似乎我无法在不设置背景图像的情况下设置shadowImage。

如何在半透明导航栏上设置shadowImage?

谢谢!

2 个答案:

答案 0 :(得分:0)

是的,如果不设置backgroundImage,则无法设置navigationBar的shadowImage:

请参阅UINavigationBar Documentation

  

要显示自定义阴影图像,必须使用自定义背景图像   也可以使用setBackgroundImage:forBarMetrics:method。

进行设置

但你可以用空图像渲染shadowImage:

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc ]init]];

答案 1 :(得分:0)

如果您希望将半透明效果保留在NavigationBar中,则标记为答案的响应不起作用。

我做的解决方法是:

1)用我想要的颜色创建一个图像:

CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

然后我将此作为backgroundImage分配给UINavigationBar

[[UINavigationBar appearance]setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance]setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

请注意,这会使导航栏完全透明。然后我做了以下工作来模仿半透明的模糊'效果:

UIView *obfuscateView = [[UIView alloc] initWithFrame:CGRectMake(0,0,64,self.view.frame.width)];
[obfuscateView setBackgroundColor:[UIColor blueColor]];
[obfuscateView setAlpha:0.9f];
[self.view addSubView:obfuscateView];

这里最重要的是你需要在navigationBar后面添加一个模仿模糊效果的附加视图。这可以通过使用Alpha透明度而不是使用模糊视图实际进行计算来实现对性能的最小影响。另请注意,此UIView需要具有相同的颜色。

这可以让你做的是使用具有不同alpha值的渐变来在导航栏中创建淡入淡出效果。