更新:在 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或更早版本,可以尝试以下方法:
我发现将视图翻转似乎对我很有效。这会将ScrollView从底部开始,并在添加新数据时自动向下滚动视图。
- 将最外层视图旋转180度
.rotationEffect(.radians(.pi))
- 沿垂直平面翻转它
.scaleEffect(x: -1, y: 1, anchor: .center)
由于现在所有的内部视图都被旋转和翻转了,因此您还需要对它们进行同样的操作以恢复原样。
如果您需要在多个地方使用此功能,则值得创建一个自定义视图。
您可以尝试以下代码:
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)
这是一个用于翻转的视图扩展
extension View {
public func flip() -> some View {
return self
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
}