我有一个通用的UIViewController,我想在其中隐藏状态栏。我有更多的视图控制器应该显示状态栏,但是这个特定的视图控制器应该隐藏状态栏。
我在UIViewController类中实现了以下方法:
override func viewDidLoad() {
super.viewDidLoad()
// FIXME: hide status bar
var prefersStatusBarHidden: Bool {
return true
}
setNeedsStatusBarAppearanceUpdate()
}
override func viewWillAppear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = false
}
在我的info.plist中,我设置了以下设置:
当我导航到该视图控制器并且仍然可见时,状态栏不会隐藏。
在视图控制器中,您要隐藏状态栏,
在viewWillAppear
方法,UIApplication.shared.isStatusBarHidden = true
,
在viewWillDisAppear
方法,UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.isStatusBarHidden = true
在这个'isStatusBarHidden
'的Setter之上,在iOS 9.0
被弃用了
所以使用下面的代码它工作正常:)
override var prefersStatusBarHidden: Bool {
return true
}
App Delegate swift 4.2
NotificationCenter.default.addObserver(self, selector: #selector(videoExitFullScreen), name:NSNotification.Name(rawValue: "UIWindowDidBecomeHiddenNotification") , object: nil)
@objc func videoExitFullScreen() {
UIApplication.shared.setStatusBarHidden(false, with: .none)
}
要关闭某些视图控制器的状态栏但不是全部,请删除此info.plist条目(如果存在)或将其设置为YES:
View controller-based status bar appearance = YES
然后将此行添加到需要隐藏状态栏的每个视图控制器
override var prefersStatusBarHidden: Bool { return true }
要关闭整个应用程序的状态栏,请将其添加到info.plist:
View controller-based status bar appearance = NO
这将允许“隐藏状态栏”按预期工作。检查项目在“部署信息”下的“常规”设置中的隐藏状态栏。
在ViewController中添加以下行
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}