9

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

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

不过,这种方法似乎无济于事。它永远不会被调用,并且 home 指示器永远不会隐藏,即使在一段时间不活动之后也是如此。模拟器似乎确实支持这一点,因为照片应用程序确实隐藏了主页指示器。

是否需要设置其他标志才能使其正常工作?我在多个视图控制器中尝试过,但没有一个显示正确的行为。

我也尝试添加

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

对我viewDidLoad()来说,但无济于事

4

3 回答 3

8

如果你显示你的UIViewControllerin UINavigationController,你必须覆盖childViewControllerForHomeIndicatorAutoHidden()函数:

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

或者,如果您显示您UIViewController喜欢的父视图控制器的子视图,您还必须覆盖此函数并返回子视图控制器。

于 2017-10-16T17:57:44.153 回答
1

根据 prefersHomeIndicatorAutoHidden的开发人员指南,它清楚地表明,

系统会考虑您的偏好,但返回 YES 并不能保证该指示器将被隐藏。

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

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

于 2017-11-06T17:09:20.047 回答
1

@Beniamin 答案的 Swift 版本:

extension UINavigationController {
    open override var childForHomeIndicatorAutoHidden: UIViewController? {
        return topViewController
    }
}
于 2019-06-13T15:21:47.607 回答