ScrollViewReader를 이용하면 스크롤를 자동으로 할 수 있다.
뷰 화면 초점을 맞추거나, 채팅 내용 검색 등에 활용할 수 있겠음
다음 코드에서 ScrollViewReader로 ScrollView를 감싸주고, proxy를 이용해서 scrollTo~ 해주면 위와 같이 작동한다.
import SwiftUI
struct ContentView: View {
private var dataArray: [String] = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
private let target: Int = 5 //f
var body: some View {
ScrollViewReader{ proxy in //ScrollViewReader
ScrollView(.vertical){
LazyVStack{
ForEach(0..<dataArray.count){ i in
HStack{
Text("\(dataArray[i])").padding()
.foregroundColor(i==target ? .red : .black)
}.padding()
.id(i)
}
}.rotationEffect(Angle(degrees: 180))
.scaleEffect(x: -1.0, y: 1.0, anchor: .center)
}
.rotationEffect(Angle(degrees: 180))
.scaleEffect(x: -1.0, y: 1.0, anchor: .center)
.overlay(alignment: .bottomTrailing) {
VStack(spacing: 20) {
Button {
withAnimation {
proxy.scrollTo(target, anchor: .bottom)
}
} label: {
RoundedRectangle(cornerRadius: 12)
.frame(width: 100, height: 80)
.overlay {
Text("Top\n'f'")
.bold()
.foregroundColor(.white)
}
.padding([.bottom, .trailing], 20)
}
}
}
}
}
}
target값은 id(i)로 체크
근데 anchor 설정할 때
scrollToTop하고싶으면 anchor을 bottom으로 설정해주어야함.
ScrollView를 bottom으로 당긴다는 뜻
scroll to bottom은 반대로 anchor을 top으로 설정
아래와 같이 center도 가능!
메모메모,,
'PROGRAMMING CODE > SWIFT' 카테고리의 다른 글
[SwiftUI] 다음(kakao) 주소찾기 part.2 (WKWebView, Sheet사용하기, Binding) (1) | 2023.10.19 |
---|---|
[SwiftUI] 다음(kakao) 주소찾기 part.1 (WKWebView, 웹 통신) (1) | 2023.10.19 |
[SwiftUI] 채팅 기능 (UpScroll) (0) | 2023.10.12 |
[SwiftUI] highPriorityGesture (NavigationLink 위 제스쳐 처리) (1) | 2023.10.10 |
[SwiftUI] Target No Device, 시뮬레이터 없음 (엑스코드 15ver 업데이트) (1) | 2023.09.27 |