1

I am trying to set the shadowImage of the navigaion bar in my app delegate:

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

This does not work by itself. It only works if I set the background image of the navigaion bar as well:

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

Here is my problem... the navigation bar is transluncent and I would like to keep it that way (no background images). But it seems that I cant set the shadowImage without setting the background image.

How can I set the shadowImage on translucent navigation bar?

Thanks!

4

2 回答 2

0

是的,你不能设置一个 navigationBar 的 shadowImage 而不设置它的 backgroundImage :

请参阅 UINavigationBar文档

要显示自定义阴影图像,还必须使用 setBackgroundImage:forBarMetrics: 方法设置自定义背景图像。

但是您可以使用空图像使 shadowImage 不可见:

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc ]init]];
于 2013-11-05T02:15:41.713 回答
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();

然后我将其分配backgroundImageUINavigationBar

[[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];

这里的主要内容是您现在需要在导航栏后面添加一个附加视图,该视图将模拟模糊效果。这可以通过使用 alpha 透明度而不是实际使用模糊视图进行计算来以最小的性能影响来实现。另请注意,这UIView需要具有相同的颜色。

不过,这允许您执行的操作也是使用具有不同 alpha 的渐变来创建导航栏的淡入淡出效果。

于 2015-03-26T20:07:59.293 回答