From 0cc08a0aae72b78cb3879e4cff33f73004333df8 Mon Sep 17 00:00:00 2001 From: ntryshkina Date: Fri, 15 Mar 2024 17:41:32 +0300 Subject: [PATCH 1/2] II-29-[pull to resresh list] --- .../PullToRefreshListView.swift | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift b/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift index 2e4d3e8..6e1c6ec 100644 --- a/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift +++ b/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift @@ -16,13 +16,15 @@ public enum PullToRefreshListViewConstant { // TODO: implement public static let offset: CGFloat = 0 } -public struct PullToRefreshListView: View { +public struct PullToRefreshListView: View { private let options: PullToRefreshListViewOptions private let refreshViewHeight: CGFloat private let showsIndicators: Bool private let isPullToRefreshEnabled: Bool private let isRefreshing: Binding + private let listStyle: Style + private let listTopPadding: CGFloat private let onRefresh: () -> Void private let pullingViewBuilder: (_ progress: CGFloat) -> PullingViewType private let refreshingViewBuilder: (_ isTriggered: Bool) -> RefreshingViewType @@ -31,6 +33,7 @@ public struct PullToRefreshListView, + listStyle: Style = .automatic, + listTopPadding: CGFloat = 0, onRefresh: @escaping () -> Void, @ViewBuilder pullingViewBuilder: @escaping (_ progress: CGFloat) -> PullingViewType, @ViewBuilder refreshingViewBuilder: @escaping (_ isTriggered: Bool) -> RefreshingViewType, @@ -48,6 +53,8 @@ public struct PullToRefreshListView scrollViewState.contentOffset, + offsetValue == 0 { + offsetValue = refreshViewHeight + } + } + private func resetReadyToTriggerIfNeeded() { if scrollViewState.contentOffset <= 1 && !scrollViewState.isReadyToTrigger && From 150d8d19ee42edd29917d2cde647daaa360af15a Mon Sep 17 00:00:00 2001 From: ntryshkina Date: Fri, 15 Mar 2024 21:59:43 +0300 Subject: [PATCH 2/2] II-29-[List modifiers compatibility with ios 15] --- .../PullToRefreshListView.swift | 4 +-- .../View+ListBackport.swift | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Sources/PullToRefreshSwiftUI/View+ListBackport.swift diff --git a/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift b/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift index 6e1c6ec..c894c21 100644 --- a/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift +++ b/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift @@ -110,8 +110,8 @@ public struct PullToRefreshListView { + + let content: Content + + init(_ content: Content) { + self.content = content + } + +} + +extension View { + var listBackport: ListBackport { ListBackport(self) } +} + +extension ListBackport where Content: View { + + @ViewBuilder func scrollContentBackground(_ visibility: Visibility) -> some View { + if #available(iOS 16, *) { + content.scrollContentBackground(visibility) + } else { + content + } + } + + @ViewBuilder func contentMargins(_ edges: Edge.Set = .all, _ length: CGFloat?) -> some View { + if #available(iOS 17, *) { + content.contentMargins(edges, length) + } else { + content + } + } + +}