我已经构建了一个滚动视图,该滚动视图在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)
下面是我要解释的图像
答案 0 :(得分:1)
解决方案是强制重建滚动视图,因为原始文件不知道内容大小已更改。
因此,假设观察到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
}