iOS 11 UINavigationBar自定义背景始终在状态栏下扩展

时间:2017-09-29 04:42:01

标签: ios uinavigationcontroller uikit uinavigationbar ios11

我将自定义背景应用于导航控制器导航栏

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

iOS10

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

right

iOS11

在iOS11中,看起来背景图像始终应用于状态栏后面。我为'forBarPosition'尝试了不同的值,但这不会改变行为。

wrong

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

我做错了什么?

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。和你一样,forBarPosition没有采取任何措施解决这个问题,即使看起来应该如此。

我会把我的解决方案称为解决方案。

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

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

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

希望这会对你有所帮助。

编辑:还有一点。对我有用的是使用stretchable image。这填补了整个空间而不像在你的例子中那样重复,但是,我使用的图像无法拉伸,所以最终这对我的场景不起作用。

答案 1 :(得分:0)

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