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

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

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

5 ответов


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

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

имейте в виду, что он будет отображаться при скольжении снизу, так же, как индикатор Центра управления в полноэкранном приложении в iOS


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

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

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

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


реализовать -(BOOL)prefersHomeIndicatorAutoHidden в своем UIViewController и return YES.

Подробнее https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden.


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

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

enter image description here


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

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

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