问题描述
以下代码包含一个文本列表和一个用于添加更多文本的按钮。添加项目后,滚动视图应滚动到倒数第二个(在本示例中为简单起见)项目。
import SwiftUI
struct ContentView: View {
@StateObject private var viewmodel = viewmodel()
var body: some View {
createView()
}
private func createView() -> some View {
return vstack {
ScrollView {
ScrollViewReader { scrollProxy in
vstack {
ForEach(viewmodel.ids,id: \.self) { id in
Text(viewmodel.texts[id]!)
.padding()
}
}.onAppear {
viewmodel.scrollProxy = scrollProxy
}
}
}
Button("Add") {
viewmodel.onAdd()
}.padding()
}
}
}
class viewmodel: ObservableObject {
@Published var ids: [UUID]
@Published var texts: [UUID: String]
@Published var responderID: UUID?
var scrollProxy: ScrollViewProxy?
init() {
let id = UUID()
self.ids = [id]
self.texts = [id: "0"]
}
func onAdd() {
let lastID = ids[ids.count - 1]
// create new block
let newID = UUID()
ids.append(newID)
self.texts[newID] = String(ids.count)
withAnimation {
scrollProxy?.scrollTo(lastID)
}
}
}
缓慢点击按钮时,滚动动画效果很好。
但是当按钮被快速点击时,动画...坏了?动画缓慢到爬行,需要很长时间才能完成。
所以我的问题是,还有另一种动画滚动的方法吗?我试过使用 CAdisplayLink,但结果也很糟糕...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)