From 065d27ebf3521aefdffb55ccb38bdfe7bd043e18 Mon Sep 17 00:00:00 2001 From: Ivan Vorobei Date: Fri, 5 Jan 2024 14:44:56 +0300 Subject: [PATCH] Added preview device. Added layout margins padding. --- .../Extensions/PreviewDevice.swift | 8 ++++ .../ViewExtension+LayoutMargins.swift | 46 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Sources/SwiftUIExtension/Extensions/PreviewDevice.swift create mode 100644 Sources/SwiftUIExtension/Extensions/ViewExtension+LayoutMargins.swift diff --git a/Sources/SwiftUIExtension/Extensions/PreviewDevice.swift b/Sources/SwiftUIExtension/Extensions/PreviewDevice.swift new file mode 100644 index 0000000..41f7727 --- /dev/null +++ b/Sources/SwiftUIExtension/Extensions/PreviewDevice.swift @@ -0,0 +1,8 @@ +import SwiftUI + +extension PreviewDevice { + + public static var visionPro: PreviewDevice { + PreviewDevice(rawValue: "Apple Vision Pro") + } +} diff --git a/Sources/SwiftUIExtension/Extensions/ViewExtension+LayoutMargins.swift b/Sources/SwiftUIExtension/Extensions/ViewExtension+LayoutMargins.swift new file mode 100644 index 0000000..90b2a3a --- /dev/null +++ b/Sources/SwiftUIExtension/Extensions/ViewExtension+LayoutMargins.swift @@ -0,0 +1,46 @@ +import SwiftUI + +extension View { + + public func horizontalSystemPadding() -> some View { + modifier(HorizontalSystemPadding()) + } +} + +struct HorizontalSystemPadding: ViewModifier { + + var value: CGFloat { + switch horizontalSizeClass { + case .compact: + return 16 + case .regular: + #if os(visionOS) + return 24 + #else + return 20 + #endif + default: + return 16 + } + } + + //var withCompensation: Bool = false + + @Environment(\.horizontalSizeClass) var horizontalSizeClass + + public func body(content: Content) -> some View { + /*let compensation: CGFloat = { + #if os(visionOS) + return -14 + #else + return .zero + #endif + }()*/ + if #available(iOS 17.0, macOS 14.0, *) { + content + .contentMargins(.horizontal, value, for: .scrollContent) + } else { + content + } + } +}