1

我在 HStack 中有一个 Text 和 Picker,由 Spacer 分隔。我想要的是 Spacer 应该占据选择器和文本之间的最大空间,以便 Text 和 Picker 不是 HStack 的末端,而是选择器扩展以占据最大空间。关于如何实现这一点以及 Picker 的大小等于其内容的任何线索?

HStack() {
                Text(template.name)
                    .multilineTextAlignment(.leading)
                Spacer()
                if template.oneItemOnly == "1" {
                    if let items = template.items {
                        Picker(selection: $selectedSegment, label:Text("")){
                            ForEach( 0..<items.count) { index in
                                Text(items[index].name)
                                    .tag(index)
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                    }
                }
            }

这是它的样子

4

1 回答 1

3

Spacer您可以通过添加.frame修饰符来设置最大宽度:

Spacer().frame(maxWidth: .infinity)

或者,您可以尝试使用GeometryReader来设置Picker相对于屏幕宽度的宽度:

GeometryReader { proxy in
    ...
    Picker(selection: $selectedSegment, label: EmptyView()) {
        ...
    }
    .frame(width: proxy.size.width / 3)
}

您也可以尝试实现自己的 Picker,如下所示:Custom Segmented Picker

于 2020-07-22T18:09:01.870 回答