SwiftUI -具有列表样式(.grouped)值的列表中的选取器会中断选取器上的文本

nwlqm0z1  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(124)

在具有.grouped列表样式的SwiftUI列表中,当Picker的文本变得太长时,嵌入在DisclosureGroup中的Picker可能会导致布局问题,从而导致其延伸到框架之外。
下面是选择器和列表的代码:

@ViewBuilder var categoryPicker: some View {
    Picker("Category", selection: $icon) {
        ForEach(category, id: \.self) { category in
            Text(category)
                .tag(category)
        }
    }
}

var body: some View {
    List {
        Section("Category") {
            DisclosureGroup("Create a category",
                            isExpanded: $isExpanded) {
                categoryNameTextField
                categoryPicker
                saveButton
            }
        }
        
        Section("Created category") {
            createdCategoryList
        }
    }
    .listStyle(.grouped)
}

5f0d552i

5f0d552i1#

您可以将其截断为合理的大小,以制作项目标签,而不是使用类别的全名。每个项目的tag仍然应该是全名。
举例来说:

private func sensiblePickerText(category: String) -> String {
    category.count < 30 ? category : category.prefix(30) + "..."
}

@ViewBuilder var categoryPicker: some View {
    Picker("Category", selection: $icon) {
        ForEach(category, id: \.self) { category in
            Text(sensiblePickerText(category: category))
                .tag(category)
        }
    }
}

相关问题