ios - 滚动视图居中并在第一次显示内容时填充内容 [SwiftUI]
问题描述
我已经构建了一个在 API 调用成功后填充的滚动视图。我面临的问题是在第一次填充内容后,所有列表都挤在屏幕中央。只有在我关闭视图并重新打开它之后,我才能看到正确的列表正确地适合屏幕。我不知道,我试图重新调整框架但没有运气。
当我离开并返回时,视图会自行纠正这一事实让我感到困惑,如果它一直保持相同的行为,那将很容易理解
ScrollView(.vertical, showsIndicators: false){
if(searchResultsViewModel.listings.count == 0){
ActivityIndicator().foregroundColor(Color(hex:Global.colorAccent))
.frame(width: 30, height: 30).padding(EdgeInsets(top: 15,leading: 0,bottom: 0,trailing: 0))
}else {
ForEach(self.searchResultsViewModel.listings, id: \.self){ item in
HStack(spacing: 0) {
ForEach(item, id: \.self) { listing in
NavigationLink(destination: ListingDetailsView(listing: listing)) {
ListingView(listing: listing)
}.buttonStyle(PlainButtonStyle())
}
}
}
}
}.navigationBarTitle(title)
下面是我试图解释的图像
解决方案
解决方案是强制重建滚动视图,因为原始不知道内容大小已更改。
所以假设self.searchResultsViewModel
是观察到的视图模型
@State private var scrollViewID = UUID() // << initial
// ... other code
ScrollView(.vertical, showsIndicators: false){
// ... content here
}.id(scrollViewID) // << dynamic id
.navigationBarTitle(title)
.onReceive(self.searchResultsViewModel.$listings) { _ in
self.scrollViewID = UUID() // << force rebuild
}
推荐阅读
- flutter - 颤振中未调用处置方法
- r - ggplot2 - 填充的相反颜色无需重新编码
- sql - 不使用多个内联选择的 Oracle SQL 查询
- sql - 'dbo' 用户不应用于正常的服务操作
- windows - 使用 ubuntu(16.04) 客户端连接 AWS Windows 系统时出现问题
- python - jupyter 内核在使用 np.array 将列表转换为大型列表 15000*512*512 的 numpy 数组时死亡
- github-api - Quarkus native 和 org.kohsuke:github-api - 无法反序列化异常
- php - 热敏打印机 PHP(Mike42 类)
- semantic-web - 推理器的实现不适用于稍大的本体。我该如何解决?
- javascript - 我们如何使用 ScrollView 和 FlatList 使标签视图与 react-native-tab-view 保持粘性?