导航控制器背景图片 在 ios 11 中重复使用 xcode 9

Navigation controller background image repeat it self in ios 11 using xcode 9

我曾尝试使用以下代码来设置 UINavigationBar 的背景图片。 它在 Xcode 9 之前工作正常,但在 Xcode 9 中图像设置不正确。

UIImage *image = [UIImage imageNamed:@"headr_bg"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

Xcode 9 image 1

Xcode 9 image 2

[before Xcode 9]

我遇到了同样的问题,但是我找不到使用插图或基于布局的方法的修复方法。最终,一个快速的解决方法是创建一个辅助背景图像,并在原始背景的顶部填充 20px,并使用状态栏的先前颜色(在您的情况下为黑色)。

然后我简单地添加了代码来更改图像,具体取决于这是否是 iOS 11+,如下所示:

NSString* navBarImg = @"navbar.png";

if (@available(iOS 11.0, *)) {
    navBarImg = @"navbar_ios11.png";
}

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:navBarImg] forBarMetrics:UIBarMetricsDefault];

这可能不起作用或可能需要调整,具体取决于状态栏可见性是否在某些时候为 shown/hidden。希望这会有所帮助,直到发现更好的方法。

可能不是完美的解决方案& 但是我有一个旧项目,因为我已经通过下面的代码修复了它。刚刚为 ios 版本 > 11 更新了导航栏位置和导航视图框架。

CGRect navbarFrame = self.navigationController.navigationBar.frame;
CGRect navFrame = self.navigationController.view.frame;
navbarFrame.size.height = 44;
navFrame.origin.y = 20;
self.navigationController.navigationBar.frame = navbarFrame;
self.navigationController.view.frame = navFrame;