无法在 iOS 11、Swift 4 的特定视图控制器中隐藏状态栏
Cannot hide status bar in a specific view controller in iOS 11, Swift 4
我有一个通用的 UIViewController,我想在其中隐藏状态栏。我有更多应该显示状态栏的视图控制器,但是这个特定的视图控制器应该隐藏状态栏。
我在 UIViewController 中实现了以下方法class:
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
在您的视图控制器中覆盖 prefersStatusBarHidden
:
override var prefersStatusBarHidden: Bool {
return true
}
为 View Controller based status bar appearance
设置值 No
,然后 show/hide 为特定视图控制器设置状态栏。
这是结果:
在 ViewController
中添加以下行
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
UIApplication.shared.isStatusBarHidden = true
以上 Setter 的“isStatusBarHidden
”已在 iOS 9.0
中弃用
所以使用下面的代码它工作正常:)
override var prefersStatusBarHidden: Bool {
return true
}
应用委托
swift4.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
这将使 "Hide status bar" 能够按预期工作。检查位于部署信息下项目常规设置中的隐藏状态栏。
在Swift5
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
我有一个通用的 UIViewController,我想在其中隐藏状态栏。我有更多应该显示状态栏的视图控制器,但是这个特定的视图控制器应该隐藏状态栏。
我在 UIViewController 中实现了以下方法class:
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
在您的视图控制器中覆盖 prefersStatusBarHidden
:
override var prefersStatusBarHidden: Bool {
return true
}
为 View Controller based status bar appearance
设置值 No
,然后 show/hide 为特定视图控制器设置状态栏。
这是结果:
在 ViewController
中添加以下行extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
UIApplication.shared.isStatusBarHidden = true
以上 Setter 的“isStatusBarHidden
”已在 iOS 9.0
所以使用下面的代码它工作正常:)
override var prefersStatusBarHidden: Bool {
return true
}
应用委托 swift4.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
这将使 "Hide status bar" 能够按预期工作。检查位于部署信息下项目常规设置中的隐藏状态栏。
在Swift5
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}