iPhone X 在视图控制器上隐藏主页指示器

iPhone X hide home indicator on view controller

我有一个视图控制器,它从上到下占据了整个屏幕。我想在 iPhone X 设备上隐藏屏幕底部的主页栏指示器。

如何在 iOS 11 中执行此操作?

您应该在您的视图控制器中覆盖 prefersHomeIndicatorAutoHidden 来实现:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

在您的 UIViewController 和 return YES 中实施 -(BOOL)prefersHomeIndicatorAutoHidden

阅读更多https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden

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

我想你可以在你的 AppDelegate 中添加这个方法来隐藏所有 ViewControllers 上的主页指示器。

还有另一种选择。如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,当他们再次向上滑动时会调用主页操作(即,需要两次滑动才能调用),那么答案就在这里:。简而言之就是覆盖你的 UIViewController:

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
    return UIRectEdge.bottom
}

prefersHomeIndicatorAutoHidden只隐藏指示器,不会抑制手势

你会得到你想要的(如果我正确理解你的评论 - 你的问题和选择的答案似乎暗示了另一个答案)。

如果你的window?.rootViewControllerUITabBarControllerUINavigationController,直接继承它,添加两个函数如下,

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

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

我尝试将其设置为 return 只有当我处于全屏模式时才为真 :

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

但它似乎不起作用...isNavigationBarAndTabBarHidden 是与我的全屏扩展相关的自定义变量。

编辑:我们需要在每次更新 prefersHomeIndicatorAutoHidden 的值时调用 setNeedsUpdateOfHomeIndicatorAutoHidden。

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