SwiftUI中有很多不同的解决方案可以隐藏整个应用程序的状态栏。
示例1:
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
示例2:
NavigationView {
}
.statusBar(hidden: true)
示例4:
<key>UIStatusBarHidden</key>
<true/>
示例5:
Status Bar Style: Hide status bar (in Target Settings)
它们是什么,优点和缺点,哪一个是首选?
示例1
每个控制器都可以单独隐藏/显示栏。但是,如果为所有视图控制器编写通用扩展,这基本上意味着要为所有视图关闭它。这实际上与通过Info.plist 为整个应用程序完全关闭它没有什么不同
// switch off statusbar for the entire app (all views)
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
// switch off statusbar for only specific views
class MyViewController: UIViewController {
..
override func prefersStatusBarHidden() -> Bool {
return true
}
}
示例2
您需要知道ViewController是否包含在容器(如UINavigationController(中,在这种情况下,NavigationController将控制StatusBar。在这种情况下,您可能需要编写一个导航控制器始终将控制权交给topviewcontroller的解决方案:请参阅iphoneX not call prefersStatusBarHidden
NavigationView {
}
.statusBar(hidden: true)
示例4
您还可以为整个应用程序设置一次状态。这是在Info.plist文件中完成的
<key>UIStatusBarHidden</key>
<true/>
示例5
你可以为整个应用程序设置设置,但每个目标的设置不同。这就完成了。
Status Bar Style: Hide status bar (in Target Settings)
示例2与UIKit(示例1(中的SwiftUI等效。其他示例与SwiftUI无关,但如果您总是希望它被隐藏,那么它仍然是正确的解决方案。在其他情况下,如果它在特定情况下隐藏,我会使用选项2。
示例5和4相同。如果更改Status Bar Style
,Info.plist属性也会更改,反之亦然。如果要隐藏整个应用程序的状态栏,则首选此方法。如果您想为特定视图隐藏它,则需要使用第二种方法。第一个示例的作用与第四个示例完全相同,但在我看来,Info.plist文件中的键看起来更具声明性。