在 SwiftUI 中,Picker 扩展为占据 HStack 内的整个空间
Posted
技术标签:
【中文标题】在 SwiftUI 中,Picker 扩展为占据 HStack 内的整个空间【英文标题】:In SwiftUI Picker expands to occupy entire space inside a HStack 【发布时间】:2020-07-22 18:01:44 【问题描述】:我在 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())
【问题讨论】:
【参考方案1】:您可以通过添加.frame
修饰符来设置Spacer
的最大宽度:
Spacer().frame(maxWidth: .infinity)
您也可以尝试使用GeometryReader
来设置Picker
相对于屏幕宽度的宽度:
GeometryReader proxy in
...
Picker(selection: $selectedSegment, label: EmptyView())
...
.frame(width: proxy.size.width / 3)
您也可以尝试实现自己的 Picker,如下所示:Custom Segmented Picker
【讨论】:
这会导致 Spacer 和 Picker 占据相同的宽度。 @Rakesh.P 在这种情况下您可以尝试使用GeometryReader
。以上是关于在 SwiftUI 中,Picker 扩展为占据 HStack 内的整个空间的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中更改 UIViewRepresentable 内的 UITextField 大小