Настройка кнопки навигации на панели навигации
Я хочу установить обратную кнопку в моем UINavigationBar на это изображение:
![enter image description here]()
Я не хочу, чтобы изображение было встроено в стандартное обратное изображение кнопки, я просто хочу, чтобы это изображение появилось.
Я знаю, глядя на другие вопросы, которые я могу использовать:
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
чтобы установить фоновое изображение кнопки "Назад". Но это заставляет изображение растягиваться, и этот конкретный образ не является, насколько я могу судить, подходящим для растяжения.
Есть ли способ, которым я могу заменить обратное изображение кнопки с моим изображением?
Я поддерживаю iOS 5.0 и выше.
Ответы
Ответ 1
Из документов для UIBarButtonItem setBackButtonBackgroundImage: forState: barMetrics::
Для хороших результатов backgroundImage должен быть растяжимым.
Итак, сделайте его растяжимым. То есть указать, какие части изображения можно растянуть, и что более важно, какие части не могут растягиваться.
В вашем случае это будут края изображения (часть, не содержащая стрелку).
UIImage resizableImageWithCapInsets:
Альтернативой является предоставление нескольких изображений (по одному для каждой метрики бара), размер которого означает, что его не нужно масштабировать.
настройка пользовательского интерфейса raywenderlich. Но вы все равно захотите сделать изображение растяжимым, чтобы вы контролировали происходящее.
Если вы не можете найти спецификацию растягивания, которая работает, ваша резервная позиция - создать элемент кнопки возврата шаблона для каждого экземпляра каждого контроллера представления и установить его как backBarButtonItem
для своего элемента навигации.
Ответ 2
Так как iOS 7+, вы должны использовать свойство backIndicatorImage
для UINavigationBar
, чтобы установить свой пользовательский индикатор. Также вам нужно предоставить backIndicatorTransitionMaskImage
(вы можете использовать одно и то же изображение для обоих).
Swift
UINavigationBar.appearance().backIndicatorImage = UIImage(named: "back-button-image")
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "back-button-image")
Objective-C
[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back-button-image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back-button-image"]];
Ответ 3
быстрая версия: -
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "[email protected]")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "[email protected]")
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
поместите это в viewDidLoad()
Ответ 4
Для Swift 3
В ViewDidLoad вставьте это
let backBtn = UIBarButtonItem()
let image: UIImage = UIImage(named: "your_image_name")!
backBtn.image = image
backBtn.action = #selector(popSelf)
backBtn.target = self
navigationItem.leftBarButtonItem = backBtn
создать следующую функцию,
func popSelf() {
navigationController?.popViewController(animated: true)
// do your stuff if you needed
}