IOS 8 NavigationBar BackgroundImage
С iOS 8 изменилась концепция только размеров iPhone и iPad, а также портрет и пейзаж, и поэтому настройка фонового изображения на навигационных барах не работает. В настоящее время я использую следующий код:
UIImage *NavigationPortraitBackground = [[UIImage imageNamed:@"nav-image-portrait"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *NavigationLandscapeBackground = [[UIImage imageNamed:@"nav-image-landscape"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:NavigationLandscapeBackground forBarMetrics:UIBarMetricsCompact];
Часть метрик штриховки устарела, начиная с iOS 8. При запуске моего приложения она просто повторяет изображение панели горизонтально, когда на iPhone 6 или 6 Plus. Я просмотрел фрагменты изображений, но я тоже не думаю, что это решение.
![portrait]()
![landscape]()
Ответы
Ответ 1
Я нашел решение. Мне нужно было использовать метод resizableImageWithCapInsets: resizingMode: и установить resizingMode в UIImageResizingModeStretch, иначе изображение все равно будет разбиваться на панели навигации.
Objective-C:
[[UIImage imageNamed:@"nav-image-portrait"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
Swift 3/4:
UINavigationBar.appearance().setBackgroundImage(UIImage(named: "image")!.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .default)
Ответ 2
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navbarimg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
Используйте приведенный выше код, который он работает. И использование изображения небольшого размера (40*navigarbarheight)
40 - это ширина изображения
Ответ 3
Это образец кода более точным и точным для всех размеров экрана. это поможет
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"header"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, screenWidth-50, 50)] forBarMetrics:UIBarMetricsDefault];