iOS 11 UINavigationBar 自定义背景总是在状态栏下扩展

Posted

技术标签:

【中文标题】iOS 11 UINavigationBar 自定义背景总是在状态栏下扩展【英文标题】:iOS 11 UINavigationBar custom background always extends under status bar 【发布时间】:2017-09-29 04:42:01 【问题描述】:

我正在为我的导航控制器导航栏应用自定义背景

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];

ios10

在 iOS10 中,背景应用正确,导航栏出现在状态栏下方:

iOS11

然而,在 iOS11 中,看起来背景图像总是应用在状态栏后面。我为“forBarPosition”尝试了不同的值,但这不会改变行为。

我已将问题隔离在具有单个 uinavigationcontroller 和单行代码的独立应用程序中,如上所述。我正在使用 iPhone 8 模拟器对此进行测试。我在我的应用中使用标准导航控制器和导航栏类。

我做错了什么?

【问题讨论】:

我正在尝试解决完全相同的问题。你碰巧找到解决方案了吗? 还没找到解决办法。 这有关系吗? ***.com/questions/46275652/… @finneycanhelp 嗯不确定,因为我只是在使用内置的 uinavigatinocontroller 并打开了自动布局和安全布局指南。 【参考方案1】:

我遇到了同样的问题。和你一样,forBarPosition 没有做任何事情来解决这个问题,尽管它看起来应该这样做。

我认为我的解决方案是一种变通方法。

我使用的图片高 44 像素。因为我知道状态栏是 20px,所以我创建了一个 64px 高的新图像。我想要的效果包括扩展状态栏下的图像,这就像我想要的那样工作。

状态栏是透明的,因此您可以将顶部 20px 设置为黑色或透明或任何您想要的效果。

到目前为止,这对我来说适用于 iOS 11 的模拟器和 iPhone SE 设备,以及运行 iOS 9.3.5 的 iPod touch 设备。

希望对你有所帮助。

编辑:另外一点。对我也有用的是使用stretchable image。这填充了整个空间而没有像您的示例中那样重复,但是,我使用的图像无法拉伸,因此最终这不适用于我的场景。

【讨论】:

谢谢,这是最后的手段,我会继续寻找解决方案。 @Imran,同意。应该有更好的方法。希望有人能找到它。 将此标记为解决方案,因为看起来苹果可能只是我们将顶部导航栏拉伸到状态栏下方的一个人。 'forBarPosition' 的文档会另外指出,但我还没有设法让它发挥作用。【参考方案2】:

我也遇到了同样的问题(使用 44px 图像),并找到了另一个有趣的解决方法。 只需使用 UINavigationBar.appearance().barTintColor = UIColor(patternImage: UIImage(named: "your_image")!) 而是。

【讨论】:

好的,所以这最终会拉伸(或平铺)状态栏下的图像对吗?

以上是关于iOS 11 UINavigationBar 自定义背景总是在状态栏下扩展的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11 UINavigationBar 后退按钮图像颜色问题

iOS 11:大标题的 UINavigationBar 高度(模仿 Apple Music 应用)

在iOS 11中忽略设置UINavigationBar外观

嵌入 UISplitViewController 时,UINavigationBar 中缺少 iOS11 UISearchBar

iOS 11 - 在 UINavigationBar 上显示大标题而不使用 UINavigationController

iOS 11 中 UINavigationBar 大标题的默认字体?