如何为所有设备(包括iPhone X)设置导航栏背景图像



我正在尝试为导航栏设置背景图像。它适用于所有其他设备,但在iPhone X中由于尺寸增加而无法正常工作。

使用以下代码:

self.navigationBar.setBackgroundImage(UIImage(named: "navbar background").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0 ,right: 0), resizingMode: .stretch), for: .default)

如果您不想垂直拉伸图像,只需使用 2 张背景图像,一张用于所有设备,一张用于 iPhone X(如果您的应用程序同时适用于纵向和横向,则必须使用超过 2 张)。

ObjC:

if (MAX([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height) == 812.0) {
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_X.png"]
                                       forBarMetrics:UIBarMetricsDefault];
}
else
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar.png"]
                                   forBarMetrics:UIBarMetricsDefault];

迅速:

if max(UIScreen.main.bounds.size.width, UIScreen.main.bounds.size.height) == 812.0 {
        UINavigationBar.appearance().setBackgroundImage(UIImage(named: "navigationBar_X.png"), for: .default)
    }
    else {
        UINavigationBar.appearance().setBackgroundImage(UIImage(named: "navigationBar.png"), for: .default)
    }

如果图像垂直拉伸后看起来不错:

ObjC:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];

迅速:

UINavigationBar.appearance().setBackgroundImage(UIImage(named: "navigationBar.png")!.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0 ,right: 0), resizingMode: .stretch), for: .default)

最新更新