Кнопки, заменяющие элементы панели навигации
Я хочу разместить две кнопки под строкой состояния:
Сначала я спрятал навигационную панель:
navigationController?.setNavigationBarHidden(true, animated: false)
и сделал 2 кнопки на месте NavigationBar. Он работал на симуляторе, но на реальном устройстве (iPhone 6) событие касания не работало, когда кнопки находились в области навигационной панели.
Я решил сделать настраиваемую панель навигации с прозрачным фоном и двумя кнопками (одна вместо btn, а вторая - как rightView)
Я пробовал инструкции из Apple doc:
let backButtonBackgroundImage = UIImage(named: "testDpng.png")
let barAppearance =
UINavigationBar.appearance(whenContainedInInstancesOf: [SubViewController.self])
barAppearance.backIndicatorImage = backButtonBackgroundImage
barAppearance.backIndicatorTransitionMaskImage = backButtonBackgroundImage
// Nudge the back UIBarButtonItem image down a bit.
let barButtonAppearance =
UIBarButtonItem.appearance(whenContainedInInstancesOf: [SubViewController.self])
barButtonAppearance.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -5), for: .default)
Но ничего не произошло. BackBtn выглядит как обычно.
Как я могу это исправить? Это правильный способ - заменить элементы навигации? Или я должен скрыть панель навигации, как я пытался с самого начала?
1 ответ
Не скрывайте панель навигации, сделайте ее прозрачной и добавьте UIBarButtonItem
слева и справа от панели навигации.
Ниже код, работающий для Swift 5:
override func viewDidLoad() {
super.viewDidLoad()
//Make NavigationBar Transparent
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
//Add Left Button Which Has Image
let leftButton = UIBarButtonItem(image: UIImage(named: "shape"), style: .plain, target: self, action: #selector(crossBtnTapped))
self.navigationItem.leftBarButtonItem = leftButton
//Add Right Button Which Has Title
let rightButton = UIBarButtonItem(title: "Restore", style: .done, target: self, action: #selector(restoreTapped))
rightButton.tintColor = .darkGray
self.navigationItem.rightBarButtonItem = rightButton
}
Способы действий при нажатии кнопок
@objc func restoreTapped(){
print("Restore Tapped")
}
@objc func crossBtnTapped(){
print("Cross Tapped")
}
Выход: