prefersHomeIndicatorAutoHidden 不适用于 iPhone X

prefersHomeIndicatorAutoHidden not working on iPhone X

我目前正在将我的一个应用程序更新到 iPhone X 并尝试在全屏 viewcontroller 显示图像时隐藏主页指示器使用:

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

虽然这个方法似乎什么都不做。它永远不会被调用,主页指示器也永远不会隐藏,即使在一段时间不活动之后也是如此。模拟器似乎确实支持这一点,因为照片应用确实隐藏了主页指示器。

是否需要设置一些其他标志才能使这项工作正常进行?我在多个视图控制器中进行了尝试,其中 none 显示了正确的行为。

我也试过添加

if #available(iOS 11.0, *) {
    self.setNeedsUpdateOfHomeIndicatorAutoHidden()
}

我的 viewDidLoad() 但无济于事

如果您在 UINavigationController 中显示 UIViewController,则必须覆盖 childViewControllerForHomeIndicatorAutoHidden() 函数:

extension UINavigationController {
    open override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController? {
        return topViewController
    }
}

或者如果您显示 UIViewController 父视图控制器的子视图,您还必须重写此函数和 return 子视图控制器。

根据 developer guide 对于 prefersHomeIndicatorAutoHidden 很明显,

The system takes your preference into account, but returning YES is no guarantee that the indicator will be hidden.

此方法仅在任何对象与主页指示器重叠时才有用。

仅供参考,主页指示器只会在几秒钟后隐藏,但只要用户触摸屏幕就会重新出现。

Swift @Beniamin 的回答版本:

extension UINavigationController {
    open override var childForHomeIndicatorAutoHidden: UIViewController? {
        return topViewController
    }
}