我有一个视图控制器,从上到下占据整个屏幕。我想隐藏 iPhone X 设备屏幕底部的主页栏指示器。
如何在 iOS 11 中执行此操作?
您应该在视图控制器中重写
prefersHomeIndicatorAutoHidden
来实现这一点:
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
还有另一种选择。 如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,并且当他们再次向上滑动时会调用主页操作(即,需要两次滑动才能调用),那么答案就在这里: iPhone X 主屏幕指示灯行为。 它的缺点是重写你的 UIViewController:
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return UIRectEdge.bottom
}
prefersHomeIndicatorAutoHidden
仅隐藏指示器,但不会抑制手势。
你会得到你想要的(如果我正确理解你的评论 - 你的问题和所选答案似乎暗示着另一个答案)。
如果你的
window?.rootViewController
是UITabBarController
或UINavigationController
,只需继承它并添加两个函数如下,
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
//@available(iOS 11, *)
override var childViewControllerForHomeIndicatorAutoHidden: UIViewController? {
return nil
}
我尝试设置它并仅在全屏时返回 true :
override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }
但它似乎不起作用... isNavigationBarAndTabBarHidden 是与我的全屏扩展绑定的自定义变量。
编辑:每次更新prefersHomeIndicatorAutoHidden的值时,我们都需要调用setNeedsUpdateOfHomeIndicatorAutoHidden。
var isNavigationBarAndTabBarHidden = false {
didSet {
setNeedsUpdateOfHomeIndicatorAutoHidden()
}
}
在您的
-(BOOL)prefersHomeIndicatorAutoHidden
中实现 UIViewController
并返回 YES
。
有人有问题
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return [.all]
}
您应该尝试下面的代码,它对我有用:
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return [.all]
}