将内容添加到我的ListView时,我希望它自动向下滚动.
我用的是SwiftUI List
和BindableObject
作为控制器.新数据将被添加到列表中.
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
}
当我向消息列表中添加新数据时,我希望列表向下滚动.但是我必须手动向下滚动.
将内容添加到我的ListView时,我希望它自动向下滚动.
我用的是SwiftUI List
和BindableObject
作为控制器.新数据将被添加到列表中.
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及以下版本,您可以try :
我发现翻转视图似乎对我很有效.这将在底部启动ScrollView,并在向其添加新数据时自动向下滚动视图.
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
你也必须对你的内部视图这样做,因为现在它们都会被旋转和翻转.要将它们翻转回go ,请执行上面的相同操作.
如果你需要这么多的地方,可能值得为此定制一个视图.
您可以try 以下方法:
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)
}
}