Кнопки, заменяющие элементы панели навигации - PullRequest
0 голосов
/ 08 мая 2020

Я хочу получить две кнопки под статусной строкой: enter image description here

Сначала я спрятал navigationBar:

navigationController?.setNavigationBarHidden(true, animated: false)

и сделал 2 кнопки на месте панели навигации. Он работал на симуляторе, но на реальном устройстве (iPhone 6) событие касания не работало, когда кнопки находились в области NavigationBar

Я решил сделать настраиваемую NavigationBar с прозрачным фоном и двумя кнопками (вместо одной обратно btn и второй как rightView)

Пробовал инструкции от Apple do c:

    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 Ответ

1 голос
/ 08 мая 2020

Не скрывайте панель навигации, сделайте ее прозрачной и добавьте 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")
}

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...