更改状态栏颜色 SwiftUI 没有 UIHosting

Posted

技术标签:

【中文标题】更改状态栏颜色 SwiftUI 没有 UIHosting【英文标题】:Change Status Bar Color SwiftUI no UIHosting 【发布时间】:2020-11-23 17:09:37 【问题描述】:

我正在尝试动态更改状态栏颜色但没有成功,有人知道如何更改吗? 我没有使用 UIHosting 控制器,因此没有完全使用 swiftUI 的 AppDelegate 或 SceneDelegate:

@main
struct MyProjectApp: App

如果我设置ZStack .preferredColorScheme(.light) 它只适用一次,所以如果我转到另一个视图并尝试输入ZStack .preferredColorScheme(.dark) 它不起作用。

我想我已经在 *** 上尝试了所有问题,所以如果有人有明确的解决方案,我将不胜感激。

@更新的代码示例

struct ContentA: View 
    var body: some View 
        NavigationView 
            ZStack 
                NavigationLink(destination: ContentB()) 
                    Text("Show Detail View")
                .navigationBarTitle("Navigation")
            .preferredColorScheme(.light)
        
    

struct ContentB: View 
    var body: some View 
        ZStack 
            Text("Hello ContetB")
                .padding()
                .foregroundColor(.green)
        .preferredColorScheme(.dark)
    

如果您尝试使用这种方式更改状态栏颜色,它不起作用。

【问题讨论】:

preferredColorScheme 改变了整个屏幕的配色方案,不仅仅是状态栏。你确定要让它工作吗? @Asperi 好的,这很好,但它只能工作一次...... 【参考方案1】:

应用程序中的颜色应该是自动动态的,除非您专门设置它们。您可以在 Previews 部分切换 .preferredColorScheme。

struct ContentView: View 
    var body: some View 
        Text("Hello, world!")
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
            .preferredColorScheme(.dark)
    

【讨论】:

正如我之前评论的那样,如果我使用preferredColorScheme(.dark) 它只能工作一次,如果我有第二个屏幕并放置preferredColorScheme(.light) 它将不起作用。 在设备上运行时,整个应用程序将采用单一配色方案。我不确定你想做什么。 我更新了主要问题,你能看看你是否知道如何解决这个问题?

以上是关于更改状态栏颜色 SwiftUI 没有 UIHosting的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 应用程序生命周期中更改特定视图的状态栏颜色?

如何在 SwiftUI 应用生命周期中更改状态栏样式?

SwiftUI - 设置状态栏背景颜色以与导航栏对齐

更改选项卡式视图栏颜色 SwiftUI

SwiftUI 更改内联 navigationBarTitleDisplayMode 的导航栏背景颜色

SwiftUI:为特定视图设置状态栏颜色