From 2fb8564ae46cfdac2f3ea6cb5674f2ed62afa1d0 Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 13 Oct 2025 00:16:53 +0800 Subject: [PATCH 1/3] Fix DynamicContainer layout update issue --- Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift b/Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift index 5144e0e4a..1897b93f2 100644 --- a/Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift +++ b/Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift @@ -340,7 +340,9 @@ struct DynamicContainerInfo: StatefulRule, AsyncAttribute, ObservedAttr needsPhaseUpdate = false } let (changed, hasDepth) = updateItems(disableTransitions: disableTransitions) - if !changed { + if changed { + needsUpdate = true + } else { for (index, item) in info.items.enumerated().reversed() { guard let phase = item.phase else { continue From ebee416de3f5bdd89af3ea853d8e65ec5789a17a Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 13 Oct 2025 00:17:04 +0800 Subject: [PATCH 2/3] Add DynamicLayoutViewUITests --- .../Dynamic/DynamicLayoutViewUITests.swift | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Example/OpenSwiftUIUITests/Layout/Dynamic/DynamicLayoutViewUITests.swift diff --git a/Example/OpenSwiftUIUITests/Layout/Dynamic/DynamicLayoutViewUITests.swift b/Example/OpenSwiftUIUITests/Layout/Dynamic/DynamicLayoutViewUITests.swift new file mode 100644 index 000000000..f66cea698 --- /dev/null +++ b/Example/OpenSwiftUIUITests/Layout/Dynamic/DynamicLayoutViewUITests.swift @@ -0,0 +1,27 @@ +// +// DynamicLayoutViewUITests.swift +// OpenSwiftUIUITests + +import SnapshotTesting +import Testing + +@MainActor +@Suite(.snapshots(record: .never, diffTool: diffTool)) +struct DynamicLayoutViewUITests { + @Test + func dynamicLayout() { + struct ContentView: View { + @State var show = false + var body: some View { + VStack { + Color.red + .task { show = true } + if show { + Color.blue + } + } + } + } + openSwiftUIAssertSnapshot(of: ContentView()) + } +} From 99dae2e3d3e2c3516b449a4efda8ea4651626fa8 Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 13 Oct 2025 00:18:59 +0800 Subject: [PATCH 3/3] Add DynamicLayoutViewExample --- Example/HostingExample/ViewController.swift | 2 +- .../Dynamic/DynamicLayoutViewExample.swift | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Example/SharedExample/Layout/Dynamic/DynamicLayoutViewExample.swift diff --git a/Example/HostingExample/ViewController.swift b/Example/HostingExample/ViewController.swift index 2b0c6f233..e5605f660 100644 --- a/Example/HostingExample/ViewController.swift +++ b/Example/HostingExample/ViewController.swift @@ -66,6 +66,6 @@ class ViewController: NSViewController { struct ContentView: View { var body: some View { - ToggleExample() + DynamicLayoutViewExample() } } diff --git a/Example/SharedExample/Layout/Dynamic/DynamicLayoutViewExample.swift b/Example/SharedExample/Layout/Dynamic/DynamicLayoutViewExample.swift new file mode 100644 index 000000000..2a498c7c8 --- /dev/null +++ b/Example/SharedExample/Layout/Dynamic/DynamicLayoutViewExample.swift @@ -0,0 +1,22 @@ +// +// DynamicLayoutViewExample.swift +// SharedExample + +#if OPENSWIFTUI +import OpenSwiftUI +#else +import SwiftUI +#endif + +struct DynamicLayoutViewExample: View { + @State var show = false + var body: some View { + VStack { + Color.red + .task { show = true } + if show { + Color.blue + } + } + } +}