Строка состояния не анимируется в iPhone X - PullRequest
0 голосов
/ 25 октября 2018

Я работаю над приложением для iPhone с XCode 10 и iOS 11.

Я пытаюсь анимировать строку состояния вне экрана при переходе от одной сцены к другой.

В моем первом контроллере представления (TableViewController) я объявляю:

var isStatusBarHidden = false

Затем добавляю следующее:

override var prefersStatusBarHidden: Bool {
    return isStatusBarHidden
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return .slide
}

, а затем в методе подготовки:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "resultSegue" {
        ...

        isStatusBarHidden = true
        UIView.animate(withDuration: 0.5, animations: {
            self.setNeedsStatusBarAppearanceUpdate()
        })
    }
}

Во втором контроллере представления (ViewController) у меня есть

var isStatusBarHidden = true

и

override var prefersStatusBarHidden: Bool {
    return true
}

Анимация отлично работает на iPhone 8. Однако на iPhone X, хотястрока состояния действительно появляется и исчезает, она не анимируется.

Как сделать так, чтобы анимация происходила и на iPhone X?

1 Ответ

0 голосов
/ 25 октября 2018

Я получил ваш код для правильной работы, пока у меня не было первого контроллера представления, встроенного в UINavigationController.

Если у вас есть ваш первый контроллер представления в UINavigationController: Создайте подкласс, f.ex CustomNavigationController:

class CustomNavigationController: UINavigationController {

    var isStatusBarHidden: Bool = false

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }

}

Затем в методе подготовки к переходу в первом контроллере представления:

if let navigationController = navigationController as? CustomNavigationController {
    navigationController.isStatusBarHidden = true
    UIView.animate(withDuration: 0.5, animations: {
        self.setNeedsStatusBarAppearanceUpdate()
    })
}

И, как у вас во втором контроллере представления:

override var prefersStatusBarHidden: Bool {
    return true
}

Тогда он отлично анимирован для меня на iPhone X.

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