在 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:如何限制图像大小?

如何在 SwiftUI 中更改 UIViewRepresentable 内的 UITextField 大小

两个扩展为全宽视图的 UIStackviews?

如何在 Django 中扩展为“base.html”模板样式

SwiftUI - 使用可扩展视图构建 LazyVGrid

如何在Python中将列表扩展为函数参数[重复]