import Foundation
import SwiftUI
struct TestChatUIView: View {
@State var models: [TestChatModel2] = []
init() {
}
var body: some View {
ZStack(alignment: .top) {
ScrollViewReader { scrollViewProxy in
ScrollView {
LazyVStack(spacing: 0) {
ForEach(models.indices, id: \.self) { index in
VStack {
let message = models[index]
Text("\(message.id)")
.id(message.id)
.flipped()
.frame(minHeight: 40)
.onAppear {
if index < (3) {
for i in 0...20 {
let newModel = TestChatModel2(id: "id \(models.count + 1)", date: Date())
models.insert(newModel, at: 0)
}
}
}
}
}
}
}
.flipped()
}
VStack {
Spacer()
Button {
for int in 0...30 {
models.insert(.init(id: "id \(models.count + 1)", date: Date()), at: 0)
}
} label: {
Text("loadMore")
.background(Color.red)
}
}
}
}
}
struct TestChatModel2: Identifiable {
var id: String = UUID().uuidString
var date: Date
}
extension View {
func flipped() -> some View {
self.rotationEffect(.radians(Double.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
}
字符串
我正在制作聊天系统,这段代码是一个很好的例子。我想要的是当它接近底部时加载更多的消息。但问题是滚动焦点一直定位在底部,所以它导致递归加载更多功能。
如何修复?
我改变了.flipped()
修改器的位置,就像在VStack上,ForEach,但它从来没有工作。
1条答案
按热度按时间jjjwad0x1#
我调试了很多,只是发现这是不可行的。即使我使用UIKit(ScrollView+StackView和TableView,CollectionView)进行了相同的逻辑,所有相同的问题都发生了(当一些项目添加到顶部时,滚动移动到仍然顶部)
此外,一些聊天应用程序,如sendbird也无法解决此错误
字符串
但是在代码上面,我补充说。
.scrollTargetLayout()
.scrollPosition(id: $modelId)
**它为我工作(可悲的是,我的应用程序的目标是iOS 15)。