Swiftpack.co - tgrapperon/swiftui-layout-guides as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by tgrapperon.
tgrapperon/swiftui-layout-guides 0.1.0
Expose layout margins and readable content width to SwiftUI's Views
⭐️ 55
🕓 1 year ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/tgrapperon/swiftui-layout-guides.git", from: "0.1.0")

SwiftUI Layout Guides

This micro-library exposes UIKit's layout margins and readable content guides to SwiftUI.

Usage

Make a view fit the readable content width

Simply call the fitToReadableContentWidth() modifier:

List {
 ForEach(…) {
   Cell()
     .fitToReadableContentWidth()
 }
}

Expose the layout margins in a block

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) 
}

Expose layout margins and readable content guides in a view

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.

Installation

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.

GitHub

link
Stars: 55
Last commit: 1 year ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

0.1.0
1 year ago

What's Changed

Full Changelog: https://github.com/tgrapperon/swiftui-layout-guides/compare/0.0.5...0.1.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics