【问题标题】:How to hide the status bar in an AVPlayerViewController?如何隐藏 AVPlayerViewController 中的状态栏?
【发布时间】:2017-03-01 10:14:51
【问题描述】:

我想知道这是否可以做到,我正在开发 IOS 10、xCode 8 和 swift 3,我从这里尝试了各种解决方案,但没有一个可行:

我试图覆盖 prefersStatusBarHidden,我试图分配一个 false 值,但它是一个 get-only 属性,在 appdelegate 中,我不能这样做:

   application.statusBarHidden = true

最后,我在 plist 中设置了以下内容:

  • 状态栏最初对 YES 视图隐藏
  • 查看基于控制器的状态栏外观为 NO

并且没有效果,我相信所有这些解决方案都不起作用,因为升级到 IOS 10。

【问题讨论】:

  • 我建议您自己编写。根据我的经验,只要您需要在这些现成的滚动类之一中修改库存行为,就该自己滚动了。
  • 是的,我就是这么想的,但是,因为这是我唯一需要的改变,我想使用本地播放器,但也许我得自己写,谢谢

标签: ios iphone xcode swift3 avplayer


【解决方案1】:

您可以通过添加以下代码来隐藏任何或所有视图控制器中的状态栏:

override var prefersStatusBarHidden: Bool {
    return true
}

任何包含该代码的视图控制器都会默认隐藏状态栏。

如果你想为状态栏设置动画,只需在你的视图控制器上调用setNeedsStatusBarAppearanceUpdate()——这将强制再次读取prefersStatusBarHidden,此时你可以返回一个不同的值。如果您愿意,您对setNeedsStatusBarAppearanceUpdate() 的调用实际上可以在动画块内,这会导致状态栏以平滑的方式隐藏或显示。

来自:https://www.hackingwithswift.com/example-code/uikit/how-to-hide-the-status-bar

【讨论】:

  • 这对我不起作用。但是...我通过使用override var prefersStatusBarHidden: Bool { return true } 扩展 AVPlayerController 类找到了成功。然后状态栏停止显示。希望这对将来的某人有所帮助。
【解决方案2】:

即使在隐藏整个应用程序的状态栏后使用:

application.isStatusBarHidden = true

AVPlayerViewController 仍然显示状态栏。返回当前视图控制器(之前隐藏状态栏)时,状态栏变得可见。尝试在呈现和呈现的视图控制器上覆盖 prefersStatusBarHidden 无济于事。

唯一有效的是在呈现视图控制器的 viewWillAppear 方法中使用已弃用的方法 setStatusBarHidden

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.setStatusBarHidden(true, with: .none)
}

【讨论】:

    【解决方案3】:

    这对我有用:

    override var prefersStatusBarHidden: Bool {
         get {
             return true;
         }
    }
    

    【讨论】:

      【解决方案4】:

      简单地将 AVPlayerViewController 子类化:

      class PlayerViewController: AVPlayerViewController {
          override var prefersStatusBarHidden: Bool {
              return true
          }
      }
      

      并使用PlayerViewController()

      【讨论】:

        【解决方案5】:

        这可以通过扩展 AVPlayerViewController 来解决: 将以下行添加到 AVPlayerViewController

        extension AVPlayerViewController{
            override open var prefersStatusBarHidden: Bool {
            return true
            }
        }
        

        【讨论】:

          【解决方案6】:

          执行以下步骤:

          在 info.plist 文件集中 View controller-based status bar appearance = NO

          在 AppDelegate.swift 文件中

          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
          
           // use this code to hide status bar
              application.isStatusBarHidden = true
          
              return true
           }
          

          这段代码足以在 swift 3 中隐藏状态栏。

          【讨论】:

          • 它在我的情况下不起作用,我必须告诉在所有其他视图中,状态栏隐藏得很好,但在 AVPlayerViewController 的情况下,我无法隐藏它,有可能的? o 我必须自己制作播放器吗?
          猜你喜欢
          • 2016-02-25
          • 2016-02-15
          • 1970-01-01
          • 1970-01-01
          • 2015-09-17
          • 2013-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多