首页 > 解决方案 > 滚动视图居中并在第一次显示内容时填充内容 [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)

下面是我试图解释的图像

在此处输入图像描述

标签: iosswiftswiftui

解决方案


解决方案是强制重建滚动视图,因为原始不知道内容大小已更改。

所以假设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
    }

推荐阅读