我将自定义背景应用于导航控制器导航栏
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];
在iOS10中,背景应用正确,导航栏显示在状态栏下方:
在iOS11中,看起来背景图像始终应用于状态栏后面。我为'forBarPosition'尝试了不同的值,但这不会改变行为。
我已经在一个独立的应用程序中隔离了这个问题,该应用程序只有一个uinavigationcontroller和一行代码,如上所述。我正在使用iPhone 8模拟器进行测试。我在我的应用程序中使用标准导航控制器和导航栏类。
我做错了什么?
答案 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")!)
代替。