Как установить фоновое изображение панели навигации для всех устройств, включая iPhone X?

Я пытаюсь установить фоновое изображение для панели навигации. Он работает на всех других устройствах, но в iPhone X не работает из-за увеличенного размера.


person KavyaKavita    schedule 10.10.2017    source источник
comment
Не работает... как? дайте нам некоторые детали. Как это не работает?   -  person GetSwifty    schedule 21.10.2017


Ответы (2)


Используйте этот код:

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

Если вы не хотите растягивать изображение по вертикали, просто используйте 2 фоновых изображения, одно для всех устройств и одно для iPhone X (если ваше приложение работает как в книжной, так и в альбомной ориентации, вам нужно использовать более 2....):

Объект:

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)
    }

Если ваше изображение выглядит хорошо растянутым по вертикали:

Объект:

[[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)
person dym    schedule 20.10.2017