我正在尝试在我的app delegate中设置navigaion bar的shadowImage:
[[UINavigationBar appearance]setShadowImage:[UIImage imageNamed:@"navigation-bar-shadow"]];
这本身不起作用。它只适用于我设置导航栏的背景图像:
[[UINavigationBar appearance]setBackgroundImage:[UIImage new]forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
这是我的问题...导航栏是半透明的,我想保持这种方式(没有背景图像)。但似乎我无法在不设置背景图像的情况下设置shadowImage。
如何在半透明导航栏上设置shadowImage?
谢谢!
答案 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值的渐变来在导航栏中创建淡入淡出效果。