簡體   English   中英

SwiftUI 為什么第二次后sheet的配色方案沒有更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM