gpt4 book ai didi

ios - SwiftUI 导航栏和状态栏 - 让它们颜色相同

转载 作者:行者123 更新时间:2023-11-29 05:13:50 35 4
gpt4 key购买 nike

我有一个新应用程序,理想情况下在顶部有一个深蓝色的导航栏,该导航栏向上延伸到状态栏后面。使这个不透明和正确的蓝色颜色很痛苦,但我最终想出了如何通过将以下内容放入包含 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
}

这会导致导航栏看起来像这样。它是蓝色的,但状态栏仍然是白色的,带有黑色文本(我希望它是深蓝色,带有白色文本)。

enter image description here

接下来,我知道我必须让状态栏的文本成为“轻内容”,并从 Idiqual here 找到了一个很好的解决方案,但这只是改变了栏的颜色“主题”,并且似乎没有办法使用此方法来更改背景颜色。实现后,我现在有一个状态栏,可以在深色背景上显示浅色文本,但我无法弄清楚如何让 NavigationView 的深蓝色背景延伸到状态栏的顶部。所以我剩下的是这样的:

enter image description here

我已经尝试了几件事,例如将 .edgesIgnoringSafeArea(.top) 添加到几个不同的位置,包括 NavigationView 的右括号以及父 View 中的 TabView,但没有任何效果。我错过了一些简单的事情吗?如何将导航栏的颜色扩展到屏幕顶部?这是我的导航 View 的代码。该结构称为“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"))

我在尝试解决这个问题时遇到了困难,而且看起来应该很简单。请帮忙!

更新:根据下面凯尔的回答,我已经尝试过这种方法。这是实现 NavConfigurator 后导航栏的屏幕截图(请注意,导航栏看起来呈浅蓝色,因为透明效果发挥了作用):

enter image description here

最佳答案

当我开始使用 SwiftUI 编码时,我遇到了同样的问题,经过大量研究后我找到了解决方案。

将以下代码放入 SceneDelegate 类中。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {        
let newAppearance = UINavigationBarAppearance()
newAppearance.configureWithOpaqueBackground()
newAppearance.backgroundColor = .black
newAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]

UINavigationBar.appearance().standardAppearance = newAppearance

//Other code for displaying the first screen
}

UINavigationBarAppearance 类用于更改导航栏的外观,从 iOS 13 开始可用。

上面的代码将改变所有 Controller 的导航栏样式。

关于ios - SwiftUI 导航栏和状态栏 - 让它们颜色相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394117/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com