swiftui ScrollView添加时自动移动到尾部位置
时间: 2023-09-05 14:07:17 浏览: 37
要在SwiftUI的ScrollView中添加内容时自动滚动到底部,可以使用ScrollView的`Reader`和`GeometryReader`来实现。以下是一个简单的示例:
```
struct ContentView: View {
@State private var messages = ["Message 1", "Message 2", "Message 3"]
var body: some View {
ScrollView {
ScrollViewReader { scrollView in
VStack {
ForEach(messages, id: \.self) { message in
Text(message)
}
}
.onChange(of: messages) { _ in
withAnimation {
scrollView.scrollTo(messages.last, anchor: .bottom)
}
}
}
}
.onAppear {
// 自动滚动到底部
DispatchQueue.main.async {
withAnimation {
scrollView.scrollTo(messages.last, anchor: .bottom)
}
}
}
}
}
```
在这里,我们首先创建一个ScrollView,然后使用ScrollViewReader将其包装起来。在ScrollView中,我们创建了一个VStack,其中包含了一个ForEach循环,用于遍历并显示我们的消息数组中的每个消息。
在VStack中,我们使用了`.onChange`修饰符来监听我们的messages数组的变化。每当messages数组发生变化时,我们就会调用`scrollView.scrollTo`方法来将ScrollView滚动到最后一个消息的位置。
在ScrollView的onAppear方法中,我们使用了`DispatchQueue.main.async`来确保我们的ScrollView在出现时自动滚动到底部。这是通过调用`scrollView.scrollTo`方法并将锚点设置为底部来实现的。
请注意,使用ScrollViewReader需要在iOS 14及以上版本中才能使用。