Сброс состояния просмотра 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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