【问题标题】:prefersHomeIndicatorAutoHidden not working on iPhone XprefersHomeIndicatorAutoHidden 在 iPhone X 上不起作用
【发布时间】:2018-03-25 14:26:09
【问题描述】:

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

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

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

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

我也尝试添加

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

给我的viewDidLoad(),但无济于事

【问题讨论】:

  • 没有一个解决方案适用于模态窗口,也许是设计使然..

标签: ios iphone uiviewcontroller iphone-x home-button


【解决方案1】:

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

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

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

【讨论】:

  • 为我工作,但我不得不使用self.topViewController
  • -(BOOL)prefersHomeIndicatorAutoHidden { return self.shouldHideHomeIndicator;//YES } -(UIViewController *)childViewControllerForHomeIndicatorAutoHidden { return self; } @BeniaminSarkisian 我在我的 Objective C 代码中添加了这个。但不工作
  • @S.Wei 没有。我已经实现了那些方法,但不起作用
【解决方案2】:

根据developer guideprefersHomeIndicatorAutoHidden 很明显,

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

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

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

【讨论】:

  • 虽然这是真的,但我不知道在正常应用程序使用期间系统当前会忽略此设置的已知情况。特别是,我在与苹果自己的照片应用程序非常相似的环境中使用它。如上所述,问题确实是在导航控制器内部时需要实现另一种方法。
【解决方案3】:

@Beniamin 答案的 Swift 版本:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2020-07-15
    • 2011-11-07
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多