iPhone X隐藏视图控制器上的家庭指示器

时间:2017-10-11 15:26:00

标签: ios uiviewcontroller uikit ios11 iphone-x

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

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

6 个答案:

答案 0 :(得分:39)

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

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

答案 1 :(得分:11)

还有另一种选择。如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,当它们再次向上滑动时,将调用主动作(IE,需要两次滑动才能调用),然后答案就在这里:{ {3}}。缺点是覆盖你的UIViewController:

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

prefersHomeIndicatorAutoHidden仅隐藏指示符,但不会取消手势。

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

答案 2 :(得分:3)

如果您的window?.rootViewControllerUITabBarControllerUINavigationController,只需继承它并添加两个函数,如下所示,

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

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

答案 3 :(得分:2)

-(BOOL)prefersHomeIndicatorAutoHidden中实施UIViewController并返回YES

了解更多https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden

答案 4 :(得分:2)

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

我想您可以在AppDelegate中添加此方法,以便在所有ViewControllers上隐藏主页指示器。

enter image description here

答案 5 :(得分:1)

我尝试设置它,并且仅在全屏显示时才返回true:

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

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

编辑:每次更新时,我们都需要调用setNeedsUpdateOfHomeIndicatorAutoHidden来获取HomeIndicatorAutoHidden的值。

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