我想知道如果可以做到这一点,我正在研究IOS 10,xCode 8和swift 3,我从这里尝试了各种解决方案,但没有效果:
我试图覆盖prefersStatusBarHidden
,我试图分配一个假值,但它是一个get-only属性,在appdelegate中,我不能这样做:
application.statusBarHidden = true
最后,我在plist中设置了以下内容:
并且没有任何效果,我相信所有这些解决方案都不起作用,因为升级到IOS 10。
只需添加以下代码,即可隐藏任何或所有视图控制器中的状态栏:
override var prefersStatusBarHidden: Bool {
return true
}
任何包含该代码的视图控制器都将默认隐藏状态栏。
如果要为状态栏设置动画,请在视图控制器上调用setNeedsStatusBarAppearanceUpdate()
- 这将强制再次读取prefersStatusBarHidden
,此时您可以返回不同的值。如果你愿意,你对setNeedsStatusBarAppearanceUpdate()
的调用实际上可以在动画块中,这会导致状态栏隐藏或以平滑的方式显示。
来自:https://www.hackingwithswift.com/example-code/uikit/how-to-hide-the-status-bar
即使在使用以下方法隐藏整个应用程序的状态栏之后:
application.isStatusBarHidden = true
AVPlayerViewController仍显示状态栏。返回到呈现视图控制器(之前隐藏状态栏)状态栏变为可见。试图在呈现和呈现的视图控制器上覆盖prefersStatusBarHidden无济于事。
唯一有效的方法是在呈现视图控制器的viewWillAppear方法中使用不推荐使用的方法setStatusBarHidden。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.setStatusBarHidden(true, with: .none)
}
这项工作对我来说:
override var prefersStatusBarHidden: Bool {
get {
return true;
}
}
这可以使用AVPlayerViewController的扩展来解决:将以下行添加到AVPlayerViewController
extension AVPlayerViewController{
override open var prefersStatusBarHidden: Bool {
return true
}
}
简单地将AVPlayerViewController子类化:
class PlayerViewController: AVPlayerViewController {
override var prefersStatusBarHidden: Bool {
return true
}
}
并使用PlayerViewController()
执行以下步骤:
在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中的状态栏。