【发布时间】:2022-01-22 23:34:45
【问题描述】:
我正在开发一个聊天应用程序,我需要根据消息交换的日期对消息进行分类。
View 的主体如下所示。
@ViewBuilder
private var bodyView: some View {
ScrollView(.vertical) {
ScrollViewReader { scrollView in
LazyVStack {
ForEach(chatItems, id: \.self) { chatItem in
Section(header: Label(chatItem.dateString, font: someFont))
{
ForEach(chatItem.msgItems) { msgItem in
ChatView(data: msgItem)
}
}
}
}
.onAppear {
if !chatItems.isEmpty {
scrollView.scrollTo(chatItems[chatItems.endIndex - 1],
anchor: .bottom)
}
}
}
}.background(color: someColor)
}
从代码 sn-p 可以清楚地看出我有显示日期的部分,在这些部分中我显示属于该日期的消息。
我的问题: 上面的代码完美运行我能够很好地渲染视图,并且它也滚动到最后一部分。我无法实现的是,我希望滚动视图滚动到属于最后一部分的结束消息。但目前它停在该部分,它不会在下面。
我尝试过的。
我尝试将此添加到内部 forEach 中的“.onAppear”中。
.onAppear {
scrollView.scrollTo(chatItem.msgItems[chatItem.msgItems.endIndex - 1], anchor: .bottom)
}
它什么也没做。
我还尝试强制滚动到外部“.onAppear”中最后一个部分的最后一个消息,它没有做任何事情,它甚至不会滚动到最后一个部分,通常使用上面的代码。
如果帮助解决问题,如果我的问题不清楚,我愿意编辑或进一步解释。
【问题讨论】:
-
跟进 Asperi 评论:这是有效的。 ForEach(groupItem.chatItem, id: .\self) { chatItem....} 我错过了将 id 放入 forEach 所以 scrollView 无法滚动到该对象
标签: swiftui swiftui-list