Как установить фоновое изображение для UINavigationBar на разных устройствах iOS

Я хочу установить полное изображение на UINavigationBar , для этого у меня есть:

 @2x image (640 x 128) @3x image (960 x 192) 

Ниже приведен снимок экрана:

введите описание изображения здесь

Пожалуйста, обратитесь к этому желтому контуру. Эта часть разрезается.

Я написал этот код, чтобы добавить изображение:

  override func viewDidLoad() { super.viewDidLoad() self.navigationController?.navigationBar.setBackgroundImage(UIImage(named:"nav-bar-b"),for: .any, barMetrics: .default) } 

Пожалуйста, помогите мне предложить лучшее решение.

4 Solutions collect form web for “Как установить фоновое изображение для UINavigationBar на разных устройствах iOS”

Я исправил эту проблему следующим образом:

Возьмите навигационную базу изображений на размер устройства, иначе уничтожьте навигационное изображение.

iPhone 6P => // 1242 × 191 пикселей
iPhone 6 => // 750 × 128 пикселей
iPhone 5 => // 640 × 128 пикселей

 func SetNavigationImage() { var navBackgroundImage:UIImage! if IS_IPHONE_6P { navBackgroundImage = UIImage(named: "nav-bar-b_1242×191") //1242 × 191 pixels }else if IS_IPHONE_6 { navBackgroundImage = UIImage(named: "nav-bar-b_750×128")//750 × 128 pixels } else { navBackgroundImage = UIImage(named: "nav-bar-b_640×128")//640 × 128 pixels } UITabBar.appearance().layer.borderWidth = 0.0 UITabBar.appearance().clipsToBounds = true UINavigationBar.appearance().isTranslucent = false UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent UINavigationBar.appearance().setBackgroundImage(navBackgroundImage, for:.default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().tintColor = .white } 

 var IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0 var IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0 var IS_IPHONE_6 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 var IS_IPHONE_6P = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0 

попробуйте этот код в viewDidLoad

UINavigationBar.appearance (). SetBackgroundImage (UIImage (named: «image») !. resizableImage (withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), для: .default)

1.self.navigationController.navigationBar.setBackgroundImage (изображение, forBarMetrics: .Default)

2. Высота навигационной панели изменяется с 44 точек (88 пикселей) до 64 точек (128 пикселей).

Создайте изображение с изменяемой размерностью. Таким образом, изображение будет масштабироваться вертикально и горизонтально, чтобы оно соответствовало навигационной панели, включая строку состояния.

Для Swift 3:

 if let image = UIImage(named: "imagefile") { let backgroundImage = image.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch) self.navigationController?.navigationBar.setBackgroundImage(backgroundImage, for: .default) } 

или

 if let image = UIImage(named: "imagefile") { let backgroundImage = image.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch) UINavigationBar.appearance().setBackgroundImage(backgroundImage, for: .default) } 
  • iOS, чей вид не находится в иерархии окон
  • Как я могу предварительно загрузить UITableView перед тем, как нажать UIViewController?
  • Используйте панель вкладок с подсветкой MVVM (iOS)
  • Как я могу анимировать изменение цвета оттенка штриха в UINavigationBar, но не UITabBar?
  • Путь навигации IOS ViewController - как программно перемещаться назад
  • iOS, как программно определить, когда вызывается контроллер верхнего уровня?
  • Структура основного представления UIViewController внутри UINavigationViewController
  • В представлении контейнера навигационная панель навигационного контроллера не изменяет размер, чтобы включить строку состояния
  • Удаление диспетчеров просмотра из стека навигации
  • Swift - pushViewController из appDelegate, rootViewController.navigationController - nil
  • iOS 11 Пользовательский фон UINavigationBar всегда распространяется под панелью состояния
  • Interesting Posts

    Подключение к мобильному устройству Bluetooth iOS8.1

    KVO на removeAllObjects Триггеры NSKeyValueChangeRemoval для каждого элемента отдельно

    Атрибут основного ключа RestKit

    расстояние поездки, необходимое для значительного обновления местоположения и точности заданного местоположения

    Не удается запустить iPhone Simulator

    Медленная производительность приложения в симуляторе iOS 8 с Xcode 6

    Сохранение данных URL в переменную

    Как получить «Включить WiFi для более точного местоположения пользователя» в iOS 6

    Передача данных в UINavigationController Partent

    Как получить арабскую клавиатуру в iphone sdk

    Переключение диспетчеров представлений между 2 экранными навигационными контроллерами вызывает непоследовательное исключение иерархии

    Правильный синтаксис метода Object-C init

    Перемещение камеры по рельефу с помощью сенсорного ввода в Unity 3D

    Автоматический подсчет ссылок: указатель на не-const тип 'NSError *' без явного владения

    Магическая запись create / fetch entity в отдельном потоке

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.