This micro-library exposes UIKit's layout margins and readable content guides to SwiftUI.
Simply call the fitToReadableContentWidth()
modifier:
List {
ForEach(…) {
Cell()
.fitToReadableContentWidth()
}
}
Wrap your view in the WithLayoutMargins
view. The initializer supports two variants: one closure without argument and one closure with a EdgeInsets
argument. In this last case, the insets correspond to the layout margins for the content:
WithLayoutMargins { layoutMarginsInsets in
Text("ABC")
.padding(.leading, layoutMarginsInsets.leading)
}
You need two wrap your view in WithLayoutMargins
(you can use the argument-less closure). This will populate the content's Environment
with the layout margins and readable content in the form of insets.
WithLayoutMargins {
Content()
}
struct Content: View {
@Environment(\.layoutMarginsInsets) var layoutMarginsInsets
@Environment(\.readableContentInsets) var readableContentInsets
var body: some View {
Text("ABC")
.padding(.leading, layoutMarginsInsets.leading)
…
}
}
These insets are only valid for the bounds of the root content view. Using them deeper in the hierachy may lead to insconsitent results and you should use the measureLayoutMargins()
modifier if you want to refresh the insets for the target view.
Add .package(url: "https://github.com/tgrapperon/swiftui-layout-guides", from: "0.0.1")
to your Package dependencies, and then
.product(name: "SwiftUILayoutGuides", package: "swiftui-layout-guides")
to your target's dependencies.