我的应用程序背景较暗,但在iOS 7中,状态栏变得透明.所以我看不到任何东西,只有角落里的绿色电池指示灯.如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
我已经花了很多时间试图找出一种使用新生命周期SwiftUI App将statusBarStyle更改为亮/暗的方法。
关于状态栏的最新帖子教如何隐藏它,但我不想这样做,我只需要将其更改为深色或浅色即可。
要更改颜色,我发现的最新方法是打开SceneDelegate.swift并更改window.rootViewController以使用我自己的HostingController,但它仅适用于使用UIKit App Delegate Lifecycle 的项目。使用SwiftUI App Lifecycle,SceneDelegate.swift不会生成,那么我在哪里可以做呢?
我可以通过 Xcode 界面上的常规设置来完成。我的问题是如何通过代码动态地做到这一点。
以下是我到目前为止所得到的。
一切.swift
import Foundation
import SwiftUI
class LocalStatusBarStyle { // style proxy to be stored in Environment
fileprivate var getter: () -> UIStatusBarStyle = { .default }
fileprivate var setter: (UIStatusBarStyle) -> Void = {_ in}
var currentStyle: UIStatusBarStyle …Run Code Online (Sandbox Code Playgroud) 这是 的定义EnvironmentKey:
public protocol EnvironmentKey {
associatedtype Value
static var defaultValue: Self.Value { get }
}
Run Code Online (Sandbox Code Playgroud)
我对defaultValue财产的目的感到困惑。或者我对@Environment. 让我解释...
根据我的测试,我知道defaultValue正在访问 。例如,如果您将 定义defaultValue为 getter:
protocol MyInjector: EnvironmentKey {
static var defaultValue: Foo {
print("get default value!")
return Foo()
}
}
Run Code Online (Sandbox Code Playgroud)
你会发现 SwiftUI 经常调用这个属性(因此,在实践中我将 my 定义defaultValue为static let)。
当您在打印语句上添加断点并向下移动堆栈时,它会停在下面的箭头处:
extension EnvironmentValues {
var myInjector: Foo {
get { self[MyInjector.self] } <-----------------
set { self[MyInjector.self] = newValue }
}
}
Run Code Online (Sandbox Code Playgroud)
在堆栈的更下方是 …