diff --git a/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift b/Sources/PullToRefreshSwiftUI/PullToRefreshListView.swift index 2e4d3e8..c894c21 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 && diff --git a/Sources/PullToRefreshSwiftUI/View+ListBackport.swift b/Sources/PullToRefreshSwiftUI/View+ListBackport.swift new file mode 100644 index 0000000..e6e7a70 --- /dev/null +++ b/Sources/PullToRefreshSwiftUI/View+ListBackport.swift @@ -0,0 +1,36 @@ +import Foundation +import SwiftUI + +struct ListBackport { + + 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 + } + } + +}