今回はScrollViewReader
を使用して特定のアイテムまでスクロールする実装です。
実装サンプル
SampleScrollViewReader.swift
struct SampleScrollViewReader: View {
@State private var tee = ["緑茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "麦茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "麦茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "麦茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "麦茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "麦茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "烏龍茶", "ほうじ茶", "ジャスミン茶", "烏龍茶", "ほうじ茶", "ジャスミン茶"]
var body: some View {
ScrollViewReader { proxy in
ScrollView {
VStack {
Button(action: {
proxy.scrollTo(20)
}, label: {
Text("ジャンプ20")
})
ForEach (Array(tee.enumerated()), id: \.offset) { offset, item in
VStack(alignment: .center ,spacing: 0) {
Text(item + "\(offset)")
.padding()
.font(.system(size: 30))
.frame(maxWidth: .infinity, alignment: .leading)
.id(offset)
}.listRowInsets(EdgeInsets())
}
}
}
}
}
}
重要なところは
.id(offset)
で設定した値をproxy.scrollTo
の引数に入れてあげる事でスクロールします。
現在はOS17は画面一番下に、OS15とOS16は画面一番上になるのでそこは注意が必要です!