在 SwiftUI 中动态隐藏列表的空部分

问题描述 投票:0回答:1

我有一个动态 SwiftUI 列表,它使用状态枚举进行填充。然后它循环遍历我的数据字典,寻找状态匹配来显示数据。所有这一切都很完美。我想做但又苦苦挣扎的是隐藏那些空的状态。

有问题的代码部分是:

List {
    ForEach(USStates.allCases) { states in
        Section {
            ForEach (bucketList) { item in
                if (item.state == states.abrev) {
                    NavigationLink(destination: ItemDetails(blItem: item.recordID)) {
                        Label(item.name, systemImage: item.monogram)
                                    .frame(height: 50)
                            .foregroundColor(item.completedate=="0000-00-00" ? .white : .red)
                    }
                }
            }
        } header: {
            Text(states.rawValue)
        }
    }
}

我尝试过使用 Visibility,但无法完全获得我想要的结果。当某个状态没有匹配项时,我希望隐藏整个部分。

ios swiftui visibility swiftui-list
1个回答
0
投票

这不是 SwiftUI 问题,而是数据过滤问题。不要循环遍历此视图中没有业务显示的状态。 😉

您可以有一个单独的

var
,它仅提供存储桶列表中的状态 - 而不是以这种未经过滤的方式使用
.allCases

现在,在你的代码中(或者更好的是,在你的viewModel或presenter中),你可以这样做:

var filteredStates: [USStates] {
    USStates.allCases.filter { state in
        bucketList.contains(state)
        # note: maybe you need to compare `abbrev` here- I see from your code they are likely different types.
    }
}

然后使用它代替

USStates.allCases
List
中进行迭代。

List {
    ForEach(filteredStates) { states in /* ... */ }
    /** etc... **/

}
© www.soinside.com 2019 - 2024. All rights reserved.