Bra*_*mas 15 scrollview ios swiftui
尝试以编程方式确定 SwiftUI 中的 ScrollView 中的项目何时显示在屏幕上。我知道 ScrollView 是一次性渲染的,而不是在项目出现时渲染(如列表中),但我只能使用 ScrollView,因为我有 .scrollTo 操作。
我还了解到,在带有 UIScrollView 的 UIKit 中,可以在 UIScrollViewDelegate 中的项目框架和 ScrollView 框架之间使用 CGRectIntersectsRect,但如果可能的话,我更愿意在 SwiftUI 中找到解决方案。
示例代码如下所示:
ScrollView {
ScrollViewReader { action in
ZStack {
VStack {
ForEach(//array of chats) { chat in
//chat display bubble
.onAppear(perform: {chatsOnScreen.append(chat)})
}.onReceive(interactionHandler.$activeChat, perform: { _ in
//scroll to active chat
})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,当用户滚动时,它会检查屏幕上有哪些项目并缩放视图以适合屏幕上最大的项目。
当您在构建时立即创建所有内容时,因此VStack
不符合您的意图,而您应该使用,它只会在每个子视图出现在屏幕上之前创建它,因此将在您期望时被调用。ScrollView
onAppear
LazyVStack
onAppear
所以它应该像
ScrollViewReader { action in
ScrollView {
LazyVStack { // << this !!
ForEach(//array of chats) { chat in
//chat display bubble
.onAppear(perform: {chatsOnScreen.append(chat)})
}.onReceive(interactionHandler.$activeChat, perform: { _ in
//scroll to active chat
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9651 次 |
最近记录: |