iOS 11 UINavigationBar 自定义背景总是在状态栏下延伸

iOS 11 UINavigationBar custom background always extends under status bar

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

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

iOS10

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

iOS11

然而,在 iOS11 中,背景图像似乎总是应用在状态栏后面。我已经为 'forBarPosition' 尝试了不同的值,但这并没有改变行为。

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

我做错了什么?

我运行遇到了同样的问题。像您一样,forBarPosition 没有采取任何措施来解决问题,即使它看起来应该如此。

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

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

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

到目前为止,这在模拟器和 iPhone SE 设备 iOS 11 和 iPod touch 设备 运行 iOS 9.3.5 中对我有用。

希望对您有所帮助。

编辑:加一分。对我也有用的是使用 stretchable image。这填满了整个 space 而没有像您的示例中那样重复,但是,我使用的图像无法拉伸,因此最终这对我的场景不起作用。

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