Skip to content

Commit

Permalink
Add alignment argument to fitToReadableContentWidth
Browse files Browse the repository at this point in the history
  • Loading branch information
tgrapperon committed Sep 2, 2021
1 parent aacc4bc commit 7c8a724
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions Sources/SwiftUILayoutGuides/SwiftUILayoutGuides.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,27 @@ public struct WithLayoutMargins<Content>: View where Content: View {

/// This view makes its content `View` fit the readable content width.
///
/// If the content view is already smaller than the readable content width, it does nothing.
/// - Note: This modifier is equivalent to calling ``.fitToReadableContentWidth()`` on the content view.
public struct FitReadableContentWidth<Content>: View where Content: View {
let alignment: Alignment
let content: () -> Content
public init(@ViewBuilder content: @escaping () -> Content) {
public init(alignment: Alignment = .center, @ViewBuilder content: @escaping () -> Content) {
self.alignment = alignment
self.content = content
}

public var body: some View {
InsetContent(content: content)
InsetContent(alignment: alignment, content: content)
.measureLayoutMargins()
}

private struct InsetContent: View {
let alignment: Alignment
let content: () -> Content
@Environment(\.readableContentInsets) var readableContentInsets
var body: some View {
content()
.frame(maxWidth: .infinity, alignment: alignment)
.padding(.leading, readableContentInsets.leading)
.padding(.trailing, readableContentInsets.trailing)
}
Expand All @@ -55,11 +58,10 @@ public struct FitReadableContentWidth<Content>: View where Content: View {
public extension View {
/// Use this modifier to make the view fit the readable content width.
///
/// If the view is already smaller than the readable content width, it does nothing.
/// - Note: You don't have to wrap this view inside a ``WithLayoutMargins`` view.
/// - Note: This modifier is equivalent to wrapping the view inside a ``FitReadableContentWidth`` view.
func fitToReadableContentWidth() -> some View {
FitReadableContentWidth { self }
func fitToReadableContentWidth(alignment: Alignment = .center) -> some View {
FitReadableContentWidth(alignment: alignment) { self }
}

/// Use this modifier to populate the ``layoutMarginsInsets`` and ``readableContentInsets`` for the target view.
Expand Down

0 comments on commit 7c8a724

Please sign in to comment.