diff --git a/Example/OpenSwiftUIUITests/Layout/Modifier/InsetViewModifierUITests.swift b/Example/OpenSwiftUIUITests/Layout/Modifier/InsetViewModifierUITests.swift index 19a86958b..403e6bc0f 100644 --- a/Example/OpenSwiftUIUITests/Layout/Modifier/InsetViewModifierUITests.swift +++ b/Example/OpenSwiftUIUITests/Layout/Modifier/InsetViewModifierUITests.swift @@ -7,6 +7,7 @@ import Testing @MainActor @Suite(.snapshots(record: .never, diffTool: diffTool)) struct InsetViewModifierUITests { + @Test(.bug("https://github.com/OpenSwiftUIProject/OpenSwiftUI/issues/511")) func safeAreaPaddingWithEdgeInsets() { struct ContentView: View { @@ -17,4 +18,26 @@ struct InsetViewModifierUITests { } openSwiftUIAssertSnapshot(of: ContentView()) } + + @Test + func safeAreaInset() { + struct ContentView: View { + var body: some View { + Color.red + .safeAreaInset(edge: .leading) { + Color.green.frame(width: 10) + } + .safeAreaInset(edge: .top) { + Color.blue.frame(height: 20) + } + .safeAreaInset(edge: .trailing) { + Color.gray.frame(width: 30) + } + .safeAreaInset(edge: .bottom) { + Color.yellow.frame(height: 40) + } + } + } + openSwiftUIAssertSnapshot(of: ContentView()) + } } diff --git a/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift b/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift index 3a17a241c..a4f85f693 100644 --- a/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift +++ b/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift @@ -541,18 +541,19 @@ private struct InsetViewLayout { id: alignmentKeyID, axis: secondaryAxis) ] - let position = (primaryPlacement.anchorPosition[secondaryAxis] + primaryAlignmentValue) - (secondaryAlignmentValue + .zero) + var primaryGeometry = ViewGeometry( + placement: primaryPlacement, + dimensions: primaryDimensions + ) + + let position = (primaryGeometry.origin[secondaryAxis] + primaryAlignmentValue) - (secondaryAlignmentValue + .zero) + let secondaryAnchor = UnitPoint(edge: props.edge) let secondaryPlacement = _Placement( proposedSize: secondaryProposal, aligning: secondaryAnchor, in: parentSize.value ) - - var primaryGeometry = ViewGeometry( - placement: primaryPlacement, - dimensions: primaryDimensions - ) var secondaryGeometry = ViewGeometry( placement: secondaryPlacement, dimensions: secondaryDimensions