У меня есть контроллер вида, который обрабатывает весь экран сверху вниз. Я хотел бы скрыть индикатор домашнего бара в нижней части экрана на устройствах iPhone X.
Как я могу сделать это в iOS 11?
У меня есть контроллер вида, который обрабатывает весь экран сверху вниз. Я хотел бы скрыть индикатор домашнего бара в нижней части экрана на устройствах iPhone X.
Как я могу сделать это в iOS 11?
Вы должны переопределить prefersHomeIndicatorAutoHidden
в вашем контроллере представления для достижения этого:
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
Есть еще одна альтернатива. Если вы ищете поведение, при котором индикатор тускнеет, тогда, когда пользователь перебирает его, он активируется, а при повторном повторном вызове запускается домашнее действие (для вызова требуется IE, два щелчка), тогда ответ здесь: поведение домашнего индикатора iPhone X. Короче говоря, это переопределение на вашем UIViewController:
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .bottom
}
prefersHomeIndicatorAutoHidden
только скрывает индикатор, но не будет подавлять жест.
И вы получите то, что хотите (если я правильно понимаю ваши комментарии - ваш вопрос и выбранный ответ, похоже, подразумевают другой ответ).
Если ваш window?.rootViewController
является UITabBarController
или UINavigationController
, просто унаследуйте его и добавьте две функции следующим образом:
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
//@available(iOS 11, *)
override var childViewControllerForHomeIndicatorAutoHidden: UIViewController? {
return nil
}
Внесите -(BOOL)prefersHomeIndicatorAutoHidden
в UIViewController
и верните YES
.
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
Я полагаю, вы можете добавить этот метод в свой AppDelegate для скрытия домашнего индикатора на всех ваших ViewControllers.
Я попытался установить его и вернуть значение true только в полноэкранном режиме:
override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }
но это, похоже, не работает... isNavigationBarAndTabBarHidden - это пользовательская переменная, связанная с моим полноэкранным расширением.
Изменение: нам нужно вызывать setNeedsUpdateOfHomeIndicatorAutoHidden каждый раз, когда мы обновляем значение prefersHomeIndicatorAutoHidden.
var isNavigationBarAndTabBarHidden = false {
didSet {
setNeedsUpdateOfHomeIndicatorAutoHidden()
}
}