在SwiftUI中隐藏StatusBar的正确方法



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文件中的键看起来更具声明性。

相关内容

最新更新