【问题标题】:SwiftUI - How to get a transparent status bar when in a tabbed view?SwiftUI - 如何在选项卡式视图中获得透明状态栏?
【发布时间】:2020-02-09 17:47:31
【问题描述】:

我的应用程序的第一个根视图是带有两个选项卡的选项卡式视图。第二个选项卡是带有表单的导航视图。设置可以总结如下:

struct ContentView: View {
  var body: some View {
    TabView {
      // First view
      // ...

      NavigationView {
        Form {
          // Form details
          // ...
        }
      }
      .tabItem {
        // Text and image for the tab view item
      }
    }
  }
}

问题是表单视图的背景不是白色的,它有轻微的对比(对于分组列表),这与顶部的状态栏造成了可耻的分离:

此行为在其他应用程序(例如 Apple 应用程序)中不存在。例如,Pages 应用程序的主视图是一个选项卡视图,状态栏保持透明且与顶部栏标题颜色相同。

我想要与 iPhone 设置应用程序相同的行为,标题颜色与状态栏视图匹配。

这里的问题似乎是控制状态栏外观的选项卡视图,如果我删除它一切正常。

有没有办法在标签视图中获得这种行为?

【问题讨论】:

    标签: swift xcode user-interface swiftui


    【解决方案1】:

    您可以将TabView 包装在ZStack 中,并为您的堆栈设置.edgesIgnoringSafeArea(.top)

    var body: some View {
            ZStack {
                TabView {
                    Form {
                        Text("OK")
                    }
                }.tabItem {
                    Text("Show")
                }
            }.edgesIgnoringSafeArea(.top)
        }
    

    【讨论】:

    • 这行得通,谢谢!顺便说一句,将.edgesIgnoringSafeArea(.top) 修饰符直接应用于选项卡视图也可以,为什么要使用 ZStack?
    • 是的,它也可以直接在标签视图上工作,根本没有理由使用 ZStack
    • 从 iOS 13.4 开始,这似乎使导航栏几乎超过了状态栏。我看到的栏的唯一可见部分是状态栏的大小,位于它后面不可点击。一种相当奇怪的破坏方式,但这就是发生的事情......
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多