我有一个视图控制器,从上到下占据整个屏幕。我想在iPhone X设备上隐藏屏幕底部的主页条指示器。
我如何在iOS 11中执行此操作?
答案 0 :(得分:39)
您应该在视图控制器中覆盖prefersHomeIndicatorAutoHidden
以实现:
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
答案 1 :(得分:11)
还有另一种选择。如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,当它们再次向上滑动时,将调用主动作(IE,需要两次滑动才能调用),然后答案就在这里:{ {3}}。缺点是覆盖你的UIViewController:
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .bottom
}
prefersHomeIndicatorAutoHidden
仅隐藏指示符,但不会取消手势。
你会得到你想要的东西(如果我理解你的评论正确 - 你的问题和选定的答案似乎暗示了另一个答案)。
答案 2 :(得分:3)
如果您的window?.rootViewController
是UITabBarController
或UINavigationController
,只需继承它并添加两个函数,如下所示,
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
//@available(iOS 11, *)
override var childViewControllerForHomeIndicatorAutoHidden: UIViewController? {
return nil
}
答案 3 :(得分:2)
在-(BOOL)prefersHomeIndicatorAutoHidden
中实施UIViewController
并返回YES
。
答案 4 :(得分:2)
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
我想您可以在AppDelegate中添加此方法,以便在所有ViewControllers上隐藏主页指示器。
答案 5 :(得分:1)
我尝试设置它,并且仅在全屏显示时才返回true:
override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }
但它似乎不起作用... isNavigationBarAndTabBarHidden是与我的全屏扩展程序绑定的自定义变量。
编辑:每次更新时,我们都需要调用setNeedsUpdateOfHomeIndicatorAutoHidden来获取HomeIndicatorAutoHidden的值。
var isNavigationBarAndTabBarHidden = false {
didSet {
setNeedsUpdateOfHomeIndicatorAutoHidden()
}
}