Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

weihas/FreshScrollView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

2 Commits

Repository files navigation

FreshScrollView

SwiftUI ScrollView can pull to fresh

One day, when I were writing a scrollview with a SwiftUI, I suddenly wanted to add a drop-down refresh to it, but soon found that it was too difficult...

Here is a easy way.

public struct FreshScrollView<Content>: View where Content : View{
 private let content: () -> Content
 private let action: () -> Void
 
 init(@ViewBuilder content: @escaping () -> Content, action: @escaping ()-> Void){
 self.content = content
 self.action = action
 }
 
 @State var startY: Double = 10000
 
 public var body: some View{
 ScrollView{
 GeometryReader{ geometry in
 HStack {
 Spacer()
 if geometry.frame(in: .global) .minY - startY > 30{
 ProgressView()
 .padding(.top, -30)
 .animation(.easeInOut)
 .transition(.move(edge: .top))
 .onAppear{
 let noti = UIImpactFeedbackGenerator(style: .light)
 noti.prepare()
 noti.impactOccurred()
 action()
 }
 }
 Spacer()
 }
 .onAppear {
 startY = geometry.frame(in:.global).minY
 }
 }
 content()
 }
 }
}
#if DEBUG
struct FreshScrollView_Previews: PreviewProvider {
 static var previews: some View {
 FreshScrollView {
 Text("A")
 Text("B")
 Text("C")
 Text("D")
 } action: {
 print("text")
 }
 }
}
#endif

About

SwiftUI ScrollView can pull to fresh

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /