改变半透明黑色UINavigationBar的颜色

mar*_*mba 34 uinavigationbar uinavigationcontroller uicolor translucency

我多次偶然发现,从未找到解决方案.UINavigationController的navigationBar可以设置为黑色半透明,如:

self.navigationController.navigationBar.barStyle=UIBarStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)

另外,在UINavigationBar中有一个半透明的属性,文档说:

如果是,则无论条形样式如何,导航栏都会以部分不透明度绘制.不透明度是固定的,不能更改.当导航栏由导航控制器对象管理时,允许设置此属性的值.

我试过了

self.navigationcontroller.navigationBar.tintColor=[UIColor blueColor];
self.navigationcontroller.navigationBar.translucent=YES;
Run Code Online (Sandbox Code Playgroud)

和千种变化:首先设置半透明属性,在AppDelegate和ViewController中设置它,首先设置barstyle.结果总是一样的:没有透明度.因此我的问题是:

是否真的可以将半透明UINavigationBar的颜色更改为不同于黑色的颜色(最好是在UINavigationController中)?

我希望有一个审查安全的解决方案.

谢谢,m

mar*_*mba 50

一旦你知道它,它就相当简单:

self.navigationController.navigationBar.tintColor = [UIColor blueColor];
self.navigationController.navigationBar.alpha = 0.7f;
self.navigationController.navigationBar.translucent = YES;
Run Code Online (Sandbox Code Playgroud)

translucent属性似乎只是确定主视图应该在导航栏下可见,并且适当地调整视图大小.

  • 我注意到的副作用是它改变了整个navigationBar的alpha(不仅仅是背景).具体来说,标题不是"明亮的"白色,但似乎也是0.7f alpha. (9认同)

Nic*_*rdu 17

为了更准确地模仿半透明效果,意味着只有导航栏的背景是半透明的,并且按钮,标题和其他所有内容都是不透明的,您可以这样做:

self.navigationController.navigationBar.translucent = YES;
[(UIView*)[self.navigationController.navigationBar.subviews objectAtIndex:0] setAlpha:0.7f];
Run Code Online (Sandbox Code Playgroud)