iPhone X上的prefersHomeIndicatorAutoHidden无法正常工作

9

我目前正在更新我的一个应用程序以适配 iPhone X,尝试在全屏显示图像的视图控制器上隐藏主页指示器,使用以下方法:

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

这个方法似乎没有任何作用。即使一段时间没有操作,它也从未被调用,主屏幕指示器也从未隐藏。模拟器似乎支持此功能,因为照片应用程序确实会隐藏主屏幕指示器。
是否需要设置其他标志才能使其正常工作?我在多个视图控制器中尝试了它,但都没有显示正确的行为。
我还尝试添加:
if #available(iOS 11.0, *) {
    self.setNeedsUpdateOfHomeIndicatorAutoHidden()
}

我尝试了添加到viewDidLoad()中,但没有效果。


没有任何解决方案适用于模态窗口,也许这是设计上的问题。 - Nick Kovalsky
3个回答

9
如果您在UINavigationController中展示UIViewController,则需要重写childViewControllerForHomeIndicatorAutoHidden()函数:
extension UINavigationController {
    open override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController? {
        return topViewController
    }
}

如果您将UIViewController显示为父视图控制器的子视图,则还必须重写此函数并返回子视图控制器。


对我来说起作用了,但我必须使用 self.topViewController - BlackWolf
1
-(BOOL)prefersHomeIndicatorAutoHidden { return self.shouldHideHomeIndicator;//YES }-(UIViewController *)childViewControllerForHomeIndicatorAutoHidden { return self; }@BeniaminSarkisian,我已经将这段代码添加到我的Objective C代码中,但它没有起作用。 - Vinu David Jose
@S.Wei 不好意思,我已经实现了那些方法,但是似乎没有生效。 - Vinu David Jose

3
根据 开发者指南 关于prefersHomeIndicatorAutoHidden的说明,我们可以得知以下内容:

系统会考虑你的首选项,但返回YES并不能保证指示器将被隐藏。

只有当其他对象与主页指示器重叠时,此方法才有用。

顺便提一下,主页指示器仅在几秒钟后隐藏,但只要用户触摸屏幕它就会重新出现。


虽然这是真的,但我不知道在正常应用程序使用期间系统会忽略此设置的任何已知情况。特别是,我正在非常类似于苹果自己的照片应用程序的上下文中使用它。问题确实是,如上所述,在导航控制器内部需要实现另一种方法。 - BlackWolf

2

@Beniamin的最初回答的Swift版本:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接