【问题标题】:iPhone X hide home indicator on view controlleriPhone X 在视图控制器上隐藏主页指示器
【发布时间】:2018-03-23 08:37:05
【问题描述】:

我有一个从上到下占据整个屏幕的视图控制器。我想隐藏 iPhone X 设备屏幕底部的主页栏指示器。

如何在 iOS 11 中执行此操作?

【问题讨论】:

  • 我认为这应该是可能的,我想它只适用于隐藏栏,但滑动手势仍然可以在该区域工作以返回主页。
  • 是的,我试过了,它只是把它隐藏起来,当你点击底部时,它又会显示出来。
  • 为什么会存在这个?我非常讨厌它。

标签: ios uiviewcontroller uikit ios11 iphone-x


【解决方案1】:

您应该在视图控制器中覆盖 prefersHomeIndicatorAutoHidden 来实现:

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

【讨论】:

  • 但是那张幻灯片两次不起作用,我正在模拟器中进行测试。即使它是隐藏的,在主屏幕上单次滑动即可。
  • @smitpatel 启用自动隐藏后,如果用户几秒钟没有触摸屏幕,指示器就会淡出。当用户再次触摸屏幕时,它会重新出现。仅应为播放视频或照片幻灯片等被动观看体验启用此行为
  • “你实际上必须滑动两次才能激活手势。”这不是真的。如果覆盖preferredScreenEdgesDeferringSystemGestures,则必须滑动两次,而不是覆盖prefersHomeIndicatorAutoHidden
【解决方案2】:

还有另一种选择。如果您正在寻找指示器变暗的行为,那么当用户向上滑动时它会激活,并且当他们再次向上滑动时会调用 home 操作(IE,需要两次滑动才能调用),那么答案就在这里:@ 987654321@。它的短处是覆盖你的 UIViewController:

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
    return UIRectEdge.bottom
}

prefersHomeIndicatorAutoHidden 只会隐藏指示器,不会抑制手势。

你会得到你想要的(如果我正确理解你的 cmets - 你的问题和选择的答案似乎暗示了另一个答案)。

【讨论】:

  • 这就是我想要实现的。 Rest all 只是隐藏了 home 指示器。
  • 我有一个“方法没有覆盖其超类中的任何方法”错误
  • 文档说如果你改变值,你还需要调用setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
【解决方案3】:

如果你的window?.rootViewControllerUITabBarControllerUINavigationController,只需继承它并添加如下两个函数,

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

//@available(iOS 11, *)
override var childViewControllerForHomeIndicatorAutoHidden: UIViewController? {
    return nil
}

【讨论】:

  • @Marin 它的工作原理都是一样的。 autoHidden 并不意味着“永远隐藏”。
  • 我的意思是 childVIewControllerForHomeIndicatorAutoHidden 现在是正确的属性吗?
  • @Marin 你是对的。我用 Xcode 10 更新了我的答案。
【解决方案4】:

在您的UIViewController 中实现-(BOOL)prefersHomeIndicatorAutoHidden 并返回YES

阅读更多https://developer.apple.com/documentation/uikit/uiviewcontroller/2887510-prefershomeindicatorautohidden

【讨论】:

  • 设置为NO实现了相反的
【解决方案5】:

我尝试设置它并仅在全屏时返回 true:

override var prefersHomeIndicatorAutoHidden: Bool { isNavigationBarAndTabBarHidden }

但它似乎不起作用... isNavigationBarAndTabBarHidden 是一个绑定到我的全屏扩展的自定义变量。

编辑:每次更新 prefersHomeIndicatorAutoHidden 的值时,我们都需要调用 setNeedsUpdateOfHomeIndicatorAutoHidden。

    var isNavigationBarAndTabBarHidden = false {
        didSet {
            setNeedsUpdateOfHomeIndicatorAutoHidden()
        }
    }

【讨论】:

    【解决方案6】:
    override func  prefersHomeIndicatorAutoHidden() -> Bool {
        return true
    }
    

    我想你可以在你的 AppDelegate 中添加这个方法来隐藏你所有的 ViewControllers 上的主页指示器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多