我有一个新的应用程序,理想情况下,顶部将有一个坚实的深蓝色导航栏,延伸到状态栏后面。让它不透明并保持正确的蓝色是很麻烦的,但我终于找到了如何使其工作的方法,只需在包含NavigationView的View的init()中添加以下内容:
init() {
UINavigationBar.appearance().barTintColor = UIColor(named: "primaryBlue")
UINavigationBar.appearance().backgroundColor = UIColor(named: "primaryBlue")
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().isOpaque = true
}
这将导致一个看起来像这样的导航栏。它是蓝色的,但状态栏仍然是白色的,带有黑色文本(我希望它是深蓝色的,带有白色文本)。
接下来,我知道我必须将状态栏的文本设置为“浅色内容”,并从Idiqual 这里找到了一个好的解决方案,但这只是改变了栏的颜色“主题”,似乎没有办法使用此方法更改背景颜色。实施后,我现在有一个准备好在深色背景上显示浅色文本的状态栏,但我无法弄清如何使NavigationView的深蓝色背景延伸到状态栏的顶部。所以我现在只能得到这个:我尝试了几种方法,例如在不同位置添加.edgesIgnoringSafeArea(.top),包括NavigationView的闭合括号和父视图中的TabView,但都没有效果。我是否漏掉了一些简单的东西?如何将NavigationBar的颜色延伸到屏幕顶部?这是我的Nav视图代码。这个结构体叫做“FetchFrontPageArticles”:
var body: some View {
NavigationView {
VStack {
List(self.fetcher.articles) { article in
...
}.navigationBarTitle("", displayMode: .inline)
.navigationBarItems(
leading: Text(""),
trailing: NavProfile()
)
}
}
}
"
“FetchFrontPageArticles”从此处显示的父TabView中加载:
"TabView(selection: $selection){
FetchFrontPageArticles()
.tabItem {
VStack {
Image("house")
Text("Home")
}
}
.tag(0)
Text("Second View")
.tabItem {
VStack {
Image("list.dash")
Text("Browse")
}
}
.tag(1)
...
}
.accentColor(Color("primaryYellow"))
我在解决这个问题上遇到了困难,但看起来应该很简单。请帮忙!
更新:根据Kyle下面的答案,我已经尝试过这种方法。这是实现NavConfigurator后我的导航栏的屏幕截图(注意条形图看起来更浅的蓝色,因为透明度效果发挥了作用):