IPhone X скрыть домашний индикатор на контроллере просмотра

У меня есть контроллер вида, который обрабатывает весь экран сверху вниз. Я хотел бы скрыть индикатор домашнего бара в нижней части экрана на устройствах iPhone X.

Как я могу сделать это в iOS 11?

Ответ 1

Вы должны переопределить prefersHomeIndicatorAutoHidden в вашем контроллере представления для достижения этого:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

Ответ 2

Есть еще одна альтернатива. Если вы ищете поведение, при котором индикатор тускнеет, тогда, когда пользователь перебирает его, он активируется, а при повторном повторном вызове запускается домашнее действие (для вызова требуется IE, два щелчка), тогда ответ здесь: поведение домашнего индикатора iPhone X. Короче говоря, это переопределение на вашем UIViewController:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
  return .bottom
}

prefersHomeIndicatorAutoHidden только скрывает индикатор, но не будет подавлять жест.

И вы получите то, что хотите (если я правильно понимаю ваши комментарии - ваш вопрос и выбранный ответ, похоже, подразумевают другой ответ).

Ответ 3

Если ваш window?.rootViewController является UITabBarController или UINavigationController, просто унаследуйте его и добавьте две функции следующим образом:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

//@available(iOS 11, *)
override var childViewControllerForHomeIndicatorAutoHidden: UIViewController? {
    return nil
}

Ответ 5

override func  prefersHomeIndicatorAutoHidden() -> Bool {
    return true
}

Я полагаю, вы можете добавить этот метод в свой AppDelegate для скрытия домашнего индикатора на всех ваших ViewControllers.

введите описание изображения здесь

Ответ 6

Я попытался установить его и вернуть значение true только в полноэкранном режиме:

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

но это, похоже, не работает... isNavigationBarAndTabBarHidden - это пользовательская переменная, связанная с моим полноэкранным расширением.

Изменение: нам нужно вызывать setNeedsUpdateOfHomeIndicatorAutoHidden каждый раз, когда мы обновляем значение prefersHomeIndicatorAutoHidden.

    var isNavigationBarAndTabBarHidden = false {
        didSet {
            setNeedsUpdateOfHomeIndicatorAutoHidden()
        }
    }