设置 NavigationBar 半透明时出现错误

Posted

技术标签:

【中文标题】设置 NavigationBar 半透明时出现错误【英文标题】:I got a bug when set NavigationBar translucent 【发布时间】:2016-04-06 06:53:54 【问题描述】:

当我将NavigationBar设置为半透明时,我希望NavigationBar下面不会有阴影线,并且StatusBar与视图背景具有相同的背景

我的代码是这样的:

[self.navigationController.navigationBar setTranslucent:YES];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"translucent_image"] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];

它们在 iPhone6 Plus 和 iPhone 6s Plus 等 5.5 英寸 iPhone 上完美运行,但在 iPhone 6s 和 iPhone 5s 等较小的 iPhone 上运行时,我遇到了类似错误的问题,StatusBar 变成黑色!它们在 ios 8.2、iOS 8.3 和 iOS 9.2 上是相同的代码,唯一的区别是屏幕!

我尝试将BarMetricsUIBarMetricsDefault 更改为UIBarMetricsCompactUIBarMetricsDefaultPrompt 以解决此问题,最后StatusBar 运行良好,但阴影线在所有iPhone 中都出现了!

[self.navigationController.navigationBar setTranslucent:YES];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"translucent_image"] forBarMetrics: UIBarMetricsCompact];
self.navigationController.navigationBar.shadowImage = [UIImage new];

好奇怪!这是iOS的bug吗?

【问题讨论】:

【参考方案1】:

尝试将您的代码更改为

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

这对我有用(即我没有得到阴影)

【讨论】:

原来是因为图像半透明的原因? 这似乎是因为 UIBarMetricsDefault。从文档中我无法弄清楚为什么会有差异。

以上是关于设置 NavigationBar 半透明时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

解决移动端iPhone设备点击时出现半透明的灰色背景

iOS - 导航栏设置半透明或取消半透明

iPad半透明状态栏?

自定义导航栏--将NavigationBar设置透明

iPhone:UITabBarController 内的半透明导航栏

透明导航栏不起作用(呈半透明蓝色)