Seeing an issue in iOS 26.2 iPhone 17 simulator (haven't been able to reproduce on device or other simulators), where a view's state is reset after an alert is shown.
In this example the first LibraryView has the issue when alert is shown, the second LibraryView maintains state as expected.
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") { }
}
}
}
Any ideas?
The issue can be corrected by moving the .sheet to a higher level within the layout (i.e. on the NavigationStack). However, the library wants to control that presentation and not require the integration to present the sheet.