Форма 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
}

ОБНОВЛЕНИЕ: я думаю, что я действительно хотел спросить, существует ли концепция «собственности» для листа? Я имею в виду:

  1. Принадлежит ли лист представлению, к которому он прикреплен, и, следовательно, он будет отклонен, когда это представление будет уничтожено?
  2. Или не имеет значения, где лист определен в иерархии представлений?

Поскольку я никогда не читал о концепции собственности, я полагаю, что пункт 2 верен. Но если так, то я не понимаю, почему лист автоматически закрывается, когда я удаляюFormиSectionв приведенном выше коде.

0 ответов

Другие вопросы по тегам