Форма SwiftUI: лист не закрывается автоматически, когда вид, к которому он прикреплен, исчез
См. код ниже (кстати, имеет ту же проблему):
enum Value: String, Equatable {
case a = "a"
case b = "b"
}
struct ContentView: View {
@State var value: Value = .a
@State var showSheet = false
var body: some View {
Form {
Section {
switch value {
case .a:
Text("a")
.onTapGesture {
showSheet = true
}
.sheet(isPresented: $showSheet) {
Button("Set Value to .b") {
value = .b
}
}
case .b:
Text("b")
}
}
}
}
}
Чтобы воспроизвести проблему, сначала щелкните текст «а», чтобы открыть лист, затем нажмите кнопку на листе, чтобы изменить значение. Я ожидаю, что лист будет автоматически закрыт, потому что вид, к которому он прикреплен, исчез. Но это не так.
Если я удалю или заменю его, скажем,ScrollView
, поведение такое, как я ожидал. С другой стороны, однако, заменив его наList
та же проблема (лист не закрывается).
Я подумываю написать в ФБ, но сначала хотел бы спросить здесь. Кто-нибудь знает, это баг или фича? Если это фича, то в чем ее смысл?
В настоящее время я использую этот обходной путь. Любые другие предложения, кроме звонкаdismiss()
в обработчике кнопки приветствуются.
.onChange(of: value) { _ in
showSheet = false
}
ОБНОВЛЕНИЕ: я думаю, что я действительно хотел спросить, существует ли концепция «собственности» для листа? Я имею в виду:
- Принадлежит ли лист представлению, к которому он прикреплен, и, следовательно, он будет отклонен, когда это представление будет уничтожено?
- Или не имеет значения, где лист определен в иерархии представлений?
Поскольку я никогда не читал о концепции собственности, я полагаю, что пункт 2 верен. Но если так, то я не понимаю, почему лист автоматически закрывается, когда я удаляюForm
иSection
в приведенном выше коде.