鑒于下面的代碼,我做了一個奇怪的觀察(在 macOS 上)。如果 List 包含在 NavigationView 中,我突然每次點擊一行都會獲得兩個更新(一個在 mouseDown 上 - 也就是按住滑鼠點擊而不釋放它,一個在 mouseUp - 也就是釋放滑鼠點擊)。這不會發生在簡單的串列上,或者如果它被包裝在 HStack 中。有誰知道我為什么以及如何控制/改變這種行為?
查看 HStack 版本:

查看 NavigationView 版本:

struct ContentView: View {
@State var selection: Set<Int> = []
var body: some View {
List(0..<20, selection: Binding(get: {
self.selection
}, set: { val in
print("set \(val)")
self.selection = val
})) { idx in
Text("\(idx)")
}
Color.red
Color.green
Color.blue
}
}
// Wrapped in a HStack, 1 update per row selection is triggered, as expected!
struct HStackVersion: View {
var body: some View {
HStack(spacing:0.0) {
ContentView()
}
}
}
// Wrapped in a NavigationView, 2 updates per row selection are triggered??
struct NavigationViewVersion: View {
var body: some View {
NavigationView {
ContentView()
}
}
}
uj5u.com熱心網友回復:
下面的螢屏截圖顯示了設定器中斷點的堆疊跟蹤,顯示SwiftUI.ListCoreCoordinator設定系結兩次。我在Map 
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473890.html
