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

问题描述 投票:0回答:7

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

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

ios uiviewcontroller uikit ios11 iphone-x
7个回答
87
投票

您应该在视图控制器中重写

prefersHomeIndicatorAutoHidden
来实现这一点:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

30
投票

还有另一种选择。 如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,并且当他们再次向上滑动时会调用主页操作(即,需要两次滑动才能调用),那么答案就在这里: iPhone X 主屏幕指示灯行为。 它的缺点是重写你的 UIViewController:

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
    return UIRectEdge.bottom
}

prefersHomeIndicatorAutoHidden
仅隐藏指示器,但不会抑制手势。

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


6
投票

如果你的

window?.rootViewController
UITabBarController
UINavigationController
,只需继承它并添加两个函数如下,

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

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

4
投票

我尝试设置它并仅在全屏时返回 true :

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

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

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

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

3
投票

在您的

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

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


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

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

enter image description here


0
投票

有人有问题

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
    return [.all]
}

您应该尝试下面的代码,它对我有用:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return [.all]
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.