感谢您花时间帮助他人。
这是原帖,我发布在这里也希望有更好的运气。谢谢!
我们的 SwiftUI 应用程序最低部署是 iOS 14。仅在 iOS 16 中,我们就一直在努力解决状态栏颜色问题。
我们无法将其颜色/外观从浅色更改为深色。
从现在开始,我们习惯用...来管理外观。
1-当给定条件时,在特定视图中调用,例如不支持暗模式,或者侧菜单已打开
UIApplication.setStatusBarStyle(.darkContent)
Run Code Online (Sandbox Code Playgroud)
2- 在任何 SwiftUI 视图上支持此功能的扩展
import UIKit
extension UIApplication {
class func setStatusBarStyle(_ style: UIStatusBarStyle) {
if let controller = UIApplication.getKeyWindow()?.rootViewController as? ContentHostingController {
controller.changeStatusBarStyle(style)
}
}
}
Run Code Online (Sandbox Code Playgroud)
3-实际上,控制器类
import SwiftUI
import UIKit
class ContentHostingController: UIHostingController<AnyView> {
private var currentStatusBarStyle: UIStatusBarStyle = .default
override var preferredStatusBarStyle: UIStatusBarStyle {
currentStatusBarStyle
}
func changeStatusBarStyle(_ style: UIStatusBarStyle) {
self.currentStatusBarStyle = style
self.setNeedsStatusBarAppearanceUpdate()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我所说,这在 iOS 16 上不再起作用。
当我们用谷歌搜索它时...
首先,一个视图扩展来保持干净:
func iOS16navBarAdapter(_ colorScheme: ColorScheme) -> some View {
if #available(iOS 16, *) {
return self
.toolbarBackground(Color.navigationBar, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
.toolbarColorScheme(colorScheme, for: .navigationBar)
} else {
return self
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在您的视图中按如下方式使用:
@State private var iOS16colorScheme: ColorScheme = .dark
...
VStack {
...
}
.iOS16navBarAdapter(iOS16colorScheme)
.onChange(of: globalSideMenu.xCoord) { value in
iOS16colorScheme = value > sideMenuOffset ? .light : .dark
}
Run Code Online (Sandbox Code Playgroud)
有多种方法可以更改状态栏颜色。
从这个开始View:
struct ContentView: View {
var body: some View {
ZStack {
Color.mint
.ignoresSafeArea()
Text("Hello")
}
}
}
Run Code Online (Sandbox Code Playgroud)
并设置以下info.plist键:
查看基于控制器的状态栏外观:否
状态栏样式:深色内容
给出:
改变
给出:
您还可以在每个视图的基础上更改状态栏文本颜色,确保您设置
然后将视图包装在 a 中NavigationStack,并添加以下toolbar修饰符:
.toolbarBackground(.mint, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
.toolbarColorScheme(<colorScheme>, for: .navigationBar)
Run Code Online (Sandbox Code Playgroud)
例如:
struct ContentView: View {
var body: some View {
NavigationStack {
TestView(colorScheme: .dark)
}
}
}
struct TestView: View {
let colorScheme: ColorScheme
var body: some View {
ZStack {
Color.mint
.ignoresSafeArea()
VStack {
Text("Hello")
NavigationLink("Push") {
TestView(colorScheme: .dark)
}
}
}
.toolbarBackground(.mint, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
.toolbarColorScheme(colorScheme, for: .navigationBar)
}
}
Run Code Online (Sandbox Code Playgroud)
给出:
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |