[英]SwiftUI Why is the color scheme of sheet not updating after the second time
我正在嘗試通過單擊按鈕更改 SwiftUI 中工作表的配色方案並使用 @AppStorage 存儲所選方案。 單擊按鈕時它恰好工作兩次,但之后配色方案將不再改變。 如果這很重要,我正在 iOS 15 上進行測試。 我注意到 @AppStorage 屬性的 onChanged 中的打印語句也只被調用了兩次。 這是重現該問題的最小示例:
import SwiftUI
struct settingsView: View {
@State private var showSheet = false
@AppStorage("isDarkMode") private var isDarkMode = false
var body: some View {
Button("Show Sheet") {
showSheet.toggle()
}
.sheet(isPresented: $showSheet) {
Button("Toggle Color scheme") {
isDarkMode.toggle()
}
.preferredColorScheme(isDarkMode ? .dark : .light)
.onChange(of: isDarkMode) { newValue in
print("isDarkMode changed to \(newValue)")
}
}
}
}
您可以使用.sheet(item: ...)
嘗試這種方法,對我有用:
struct Trigger: Identifiable {
let id = UUID()
var mode: Bool
}
struct ContentView: View {
@State private var trigger: Trigger? // <-- here
@AppStorage("isDarkMode") private var isDarkMode = false
var body: some View {
Button("Show Sheet") {
trigger = Trigger(mode: true) // <-- here
}
.sheet(item: $trigger, onDismiss: {}) { val in // <-- here
Button("Toggle Color scheme") {
isDarkMode.toggle()
}
.preferredColorScheme(isDarkMode ? .dark : .light)
.onChange(of: isDarkMode) { newValue in
print("isDarkMode changed to \(newValue)")
}
}
}
}
.sheet(isPresented: $showSheet)...
似乎有一些嚴重的限制,這些限制在文檔中沒有得到很好的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.