iPhone X hide home indicator on view controller

北城以北 提交于 2019-12-02 17:04:13

You should override prefersHomeIndicatorAutoHidden in your view controller to achieve that:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

There is another alternative. If you are looking for the behavior where the indicator dims, then when the user swipes up it activates, and when they swipe up again the home action is invoked (I.E., two swipes are needed to invoke), then the answer is here: iPhone X home indicator behavior. The short of it is to override on your UIViewController:

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

prefersHomeIndicatorAutoHidden only hides the indicator, but will not suppress the gesture.

And you will get what you want (If I understand your comments correctly - your question and the selected answer seem to imply the other answer).

DawnSong

If your window?.rootViewController is a UITabBarController or UINavigationController, just inherit it and add two function as follows,

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

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

Implement -(BOOL)prefersHomeIndicatorAutoHidden in your UIViewController and return YES.

Read more https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden.

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

I suppose you can add this method in your AppDelegate for hide home indicator on all of your ViewControllers.

I tried to set it and return true only when I am in full-screen :

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

but it doesn't seem to work... isNavigationBarAndTabBarHidden is a custom variable tied to my fullscreen extension.

Edit: We need to call setNeedsUpdateOfHomeIndicatorAutoHidden every time we update prefersHomeIndicatorAutoHidden's value.

    var isNavigationBarAndTabBarHidden = false {
        didSet {
            setNeedsUpdateOfHomeIndicatorAutoHidden()
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!