无法滚动到SwiftUI中使用ScrollViewReader实现的列表的底部



我正在开发一个聊天应用程序,需要根据消息交换的日期对消息进行分类。

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)
}

从代码片段中可以清楚地看到,我有显示日期的部分,在这些部分中,我显示属于该日期的消息。

我的问题:上面的代码运行得很好,我能够很好地渲染视图,它也会滚动到最后一节。我无法实现的是,我希望滚动视图滚动到属于最后一节的结束消息。但目前它停在这个部分,它没有往下走。

我尝试过的。

我试着把这个加到";。on出现"内部forEach。

.onAppear {

scrollView.scrollTo(chatItem.msgItems[chatItem.msgItems.endIndex - 1], anchor: .bottom)
}

它没有任何作用。

我还试图强制滚动到最后一段内的最后一条消息"外层";。on出现"这没有任何作用,甚至不会滚动到最后一节,就像上面的代码一样。

如果有人帮助解决这个问题,我将不胜感激。如果我的问题不清楚,我愿意编辑或进一步解释。

scrollTo.id工作,因此您必须显式地为每个视图指定标识符,例如(假设msgItem符合此需求,否则使用逻辑的相应id(:

ForEach(chatItem.msgItems) { msgItem in
ChatView(data: msgItem).id(msgItem)     // << here !!
}

有关示例和详细信息,请参阅https://stackoverflow.com/a/60855853/12299030.

相关内容

  • 没有找到相关文章

最新更新