ScrollView๋ฅผ ํ์ด์ง ๋จ์๋ก ๋๋ ์์ ๋ทฐ ์ฌ์ด๋ก ์ค๋ ๋๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ
์ถ์ฒ : ํด ํ๋์จ , 2023๋ 6์ 16์ผ ์์ฑ
Xcode 15์ฉ์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
iOS 17์์์ ์๋ก์ด ๊ธฐ๋ฅ SwiftUI์ ScrollView๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋๋ฝ๊ฒ ์์ง์ด์ง๋ง,
scrollTargetLayout() ๋ฐ scrollTargetBehavior() ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ ๋ทฐ ๋๋ ์ ์ฒด ํ์ด์ง๋ก ์๋์ผ๋ก ์ค๋ ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ด ์ฝ๋๋ ๊ฐ๋ก ์คํฌ๋กค ๋ทฐ์ 10๊ฐ์ ๋ฅ๊ทผ ์ฌ๊ฐํ์ ๋ฐฐ์นํ๋ฉฐ ๊ฐ๊ฐ์ด ์คํฌ๋กค ํ๊ฒ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
.scrollTargetBehavior()๊ฐ .viewAligned๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ SwiftUI๋ ๋ฅ๊ทผ ์ฌ๊ฐํ ๊ฐ์ ์๋์ผ๋ก ์ค๋ ๋ฉ๋๋ค.
struct ContentView: View {
var body: some View {
ScrollView(.horizontal) {
LazyHStack {
ForEach(0..<10) { i in
RoundedRectangle(cornerRadius: 25)
.fill(Color(hue: Double(i) / 10, saturation: 1, brightness: 1).gradient)
.frame(width: 300, height: 100)
}
}
.scrollTargetLayout()
}
.scrollTargetBehavior(.viewAligned)
.safeAreaPadding(.horizontal, 40)
}
}
scrollTargetLayout()๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด์์ ๋ด์ ๋ชจ๋ ๊ฒ์ด ์คํฌ๋กค ํ๊ฒ์ด ๋๋๋ก ๋ง๋ญ๋๋ค.
์ผ๋ถ ์์ ๋ทฐ๋ง ์ค๋ ๋๊ธธ ์ํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ ๊ฐ๋ณ ๋ทฐ์ scrollTarget()๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
๋์์ ์ธ ์คํฌ๋กค ํ๊ฒ ๋์์ผ๋ก .paging์ด ์์ผ๋ฉฐ, ์ด๋ ์คํฌ๋กค ๋ฐฉํฅ์ ๋ฐ๋ผ ScrollView๋ฅผ ์ ํํ ํ ํ๋ฉด ๋๋น ๋๋ ๋์ด๋งํผ ์ด๋ํ๊ฒ ํฉ๋๋ค.
ScrollView {
ForEach(0..<50) { i in
Text("Item \(i)")
.font(.largeTitle)
.frame(maxWidth: .infinity)
.frame(height: 200)
.background(.blue)
.foregroundStyle(.white)
.clipShape(.rect(cornerRadius: 20))
}
}
.scrollTargetBehavior(.paging)