如何使GeometryReader仅在一个维度上工作?

时间:2020-06-23 16:18:07

标签: swiftui

我正在使用Geometry Reader来控制HStack中某些子视图的水平布局。最终,子视图必须等距隔开,并且其编号不是固定的。可以正常工作,没有任何问题。

但是,垂直布局仅由内容(子视图)确定,并由几何读取器扩展到最大可用高度(这是标准行为)。

欢迎提出任何有关如何克服这种行为的建议吗?

(解释问题的另一种方式是说,使用 Horizo​​ntal Geometry Reader 可以解决问题)

这里为了清楚起见添加了一个代码段:

public struct ToolbarView: View {
    
    @ObservedObject public var viewModel: ToolbarViewModel
    
    public var body: some View
    {
        GeometryReader { geometry in
            
            HStack(spacing:0) {
                ForEach(self.viewModel.items.filter({ $0.visible })) { item in
                    ToolbarItemView(itemViewModel:item, toolbarViewModel: self.viewModel)
                        .frame(width:geometry.size.width / CGFloat(Double(self.viewModel.items.count)))
                        .font(self.viewModel.textFont)
                }
            }
        }.frame(height:CGFloat(50))
    }
}

1 个答案:

答案 0 :(得分:1)

正如您在评论中指出的那样,Spacers将在没有GR的情况下解决此问题。您只需要将它们放入HStack:

HStack(spacing:0) {
    ForEach(self.viewModel.items.filter({ $0.visible })) { item in
        HStack {
            Spacer()
            ToolbarItemView(itemViewModel:item, toolbarViewModel: self.viewModel)
                .font(self.viewModel.textFont)
            Spacer()
        }
    }.frame(height:CGFloat(50))
}