Кнопки, заменяющие элементы панели навигации

Я хочу разместить две кнопки под строкой состояния:

Сначала я спрятал навигационную панель:

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

Выход:

https://i.stack.imgur.com/8KQqq.png

Другие вопросы по тегам