Кнопка навигации на панели навигации исчезает при скрытии и отображении панели навигации - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь воссоздать поведение, подобное тому, которое наблюдается для UINavigationController в приложении Apple News.
У меня есть два контроллера A и B, A встроен в UINavigationController и имеет переход к B.
Панель навигации в A скрыта, в то время как в B она видима, и при перемещении от одного к другому она анимируется правильно.

Для этого я устанавливаю A в качестве делегата для UINavigationController и добавляю

func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    if operation == .push {
        navigationController.setNavigationBarHidden(false, animated: false)
    }
    return nil
}

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    if let coordinator = navigationController.topViewController?.transitionCoordinator {
        if let _ = viewController as? ViewControllerA {
           navigationController.setNavigationBarHidden(true, animated: false)
        }

        coordinator.notifyWhenInteractionChanges { (context) in
            if context.isCancelled == true {
                navigationController.setNavigationBarHidden(false, animated: false)
            }
        }
    }
}

Проблема, с которой я сталкиваюсь, связана с жестом смахивания назад.
Когда жест запускается, я скрываю панель навигации, чтобы ее не было видно в ViewControllerA, но если жест отменен, I 'm снова показывает полосу.
К сожалению, когда она снова отображается, хотя сама полоска видна, по какой-то причине кнопка возврата не появляется.
Знаете ли вы, почему это так?

An example of the issue

1 Ответ

0 голосов
/ 19 декабря 2018

Я думаю, что вам не нужно работать с делегатом контроллера навигации в этом случае, а просто показать / скрыть панель навигации в viewWillAppear методах контроллеров вида:

class ViewControllerA: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: animated)
    }

}

class ViewControllerB: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

Я думаю, что этоболее простое решение, которое не создает проблем с отсутствующими кнопками задней панели.:)

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