Скрыть пользовательскую среднюю кнопку, когда навигация нажимает swift 4 - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть 3 элемента панели на моей вкладке, средний, который я установил, отключите и наложите его на свою среднюю настраиваемую кнопку, например,

Swift 3 - Как создать заметную кнопку на вкладкепанель (например, кнопка камеры)

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

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidAppear(animated)
    hidesBottomBarWhenPushed = true
    centerButton.isHidden = true
}

Coud вы, ребята, покажите мне, как этого добиться?

Ответы [ 2 ]

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

Вы должны установить это свойство для контроллера вида, который нажат .Важно отметить, что установка его в viewDidLoad слишком поздняя.Вместо этого вы должны установить, когда инициализируется экземпляр контроллера представления:

class PushedVC: UIViewController {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedInit()
    }

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        sharedInit()
    }

    private func sharedInit() {
        hidesBottomBarWhenPushed = true
    }

}

Конечно, вы также можете просто установить галочку Hide Bottom Bar on Push для конкретного контроллера представления при использовании раскадровок.

Дляпри таком подходе убедитесь, что ваша центральная кнопка скрыта / показана с панелью вкладок, и вам нужно добавить ее в качестве подпредставления панели вкладок в вашем подклассе UITabBar.Затем вы переопределяете hitTest, чтобы сделать его полностью всплывающим (конечно, это необходимо, только если кнопка превышает рамку панели вкладок):

class TabBar: UITabBar {

    let centerButton = ...

    // ...

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        if centerButton.frame.contains(point) {
            return centerButton
        }

        return super.hitTest(point, with: event)
    }

    // ...

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

Похоже, у вас есть опечатка там.Используйте super.viewDidDisappear ()

override func viewDidDisappear(_ animated: Bool) {
    //super.viewDidAppear(animated)
    super.viewDidDisappear(animated)
    hidesBottomBarWhenPushed = true
    centerButton.isHidden = true
}
...