向 ListView 添加内容时,我希望它自动向下滚动。
我使用 SwiftUI List
和 BindableObject
作为 Controller 。新数据正在添加到列表中。
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
}
我希望列表向下滚动,因为我将新数据附加到消息列表中。但是我必须手动向下滚动。
最佳答案
更新:在 iOS 14 中,现在有一种本地方式可以做到这一点。
我这样做
ScrollViewReader { scrollView in
ScrollView(.vertical) {
LazyVStack {
ForEach(notes, id: \.self) { note in
MessageView(note: note)
}
}
.onAppear {
scrollView.scrollTo(notes[notes.endIndex - 1])
}
}
}
对于 iOS 13 及更低版本,您可以尝试:我发现翻转 View 对我来说似乎很有效。这会在底部启动 ScrollView,当向它添加新数据时,它会自动向下 ScrollView 。
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
您也必须对您的内部 View 执行此操作,因为现在它们都将被旋转和翻转。要将它们翻转回来,请执行上述相同的操作。
如果您需要这么多地方,可能值得为此设置自定义 View 。
您可以尝试以下操作:
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
这是一个 View 扩展来翻转它extension View {
public func flip() -> some View {
return self
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
}
关于swift - 如何使 SwiftUI 列表自动滚动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57258846/