Сброс состояния просмотра SwiftUI после отображения предупрежденияIOS

Программируем под IOS
Anonymous
Сброс состояния просмотра SwiftUI после отображения предупреждения

Сообщение Anonymous »

Обнаружена проблема в симуляторе iPhone 17 iOS 26.2 (не удалось воспроизвести на устройстве), при которой состояние представления сбрасывается после отображения предупреждения.
В этом примере первый LibraryView имеет проблему при отображении предупреждения, второй LibraryView сохраняет ожидаемое состояние.

Код: Выделить всё

struct ContentView: View {

var body: some View {
NavigationStack {
List {
VStack {
LibraryView(title: "Show view (Loss of state)")
}

LibraryView(title: "Show view (Works as expected)")
}
}
}
}

/// This view is from a package dependency and wants to control the presentation of the sheet internally
public struct LibraryView: View {
@State private var isPresented: Bool = false
let title: String

public init(title: String) {
self.title = title
}

public var body: some View {
Button(self.title) {
self.isPresented = true
}
.sheet(isPresented: self.$isPresented) {
ViewWithAlert()
}
}
}

private struct ViewWithAlert: View {
@State private var isPresented: Bool = false
@State private var presentedCount = 0

var body: some View {
Button("Show Alert, count: \(presentedCount)") {
isPresented = true
presentedCount += 1
}
.alert("Hello", isPresented: self.$isPresented) {
Button("OK") { }
}
}
}

Есть идеи?
Проблему можно решить, переместив .sheet на более высокий уровень макета (т. е. в NavigationStack). Однако библиотека хочет контролировать это представление и не требовать интеграции для представления листа.

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-is-shown

Вернуться в «IOS»