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/Example/SharedExample/ContentView.swift b/Example/SharedExample/ContentView.swift index 86bcd8c7d..e1923f85d 100644 --- a/Example/SharedExample/ContentView.swift +++ b/Example/SharedExample/ContentView.swift @@ -14,11 +14,6 @@ import Foundation struct ContentView: View { var body: some View { - Color.blue - .frame(width: 80, height: 60) - .scaleEffect(0.5) - .background { Color.red } - .frame(width: 10, height: 10) - .clipped() + InsetViewModifierExample() } } diff --git a/Example/SharedExample/Layout/Modifier/InsetViewModifierExample.swift b/Example/SharedExample/Layout/Modifier/InsetViewModifierExample.swift new file mode 100644 index 000000000..802516827 --- /dev/null +++ b/Example/SharedExample/Layout/Modifier/InsetViewModifierExample.swift @@ -0,0 +1,27 @@ +// +// InsetViewModifierExample.swift +// SharedExample + +#if OPENSWIFTUI +import OpenSwiftUI +#else +import SwiftUI +#endif + +struct InsetViewModifierExample: 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) + } + } +} diff --git a/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift b/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift index 3a17a241c..5173de25a 100644 --- a/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift +++ b/Sources/OpenSwiftUICore/Layout/Modifier/InsetViewModifier.swift @@ -541,14 +541,12 @@ private struct InsetViewLayout { id: alignmentKeyID, axis: secondaryAxis) ] - let position = (primaryPlacement.anchorPosition[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 @@ -557,7 +555,7 @@ private struct InsetViewLayout { placement: secondaryPlacement, dimensions: secondaryDimensions ) - secondaryGeometry.origin[secondaryAxis] = position + secondaryGeometry.origin[secondaryAxis] = primaryGeometry.origin[secondaryAxis] + (primaryAlignmentValue - secondaryAlignmentValue) primaryGeometry.finalizeLayoutDirection( layoutDirection,