Swiftui 如何让GeometryReader仅在一维中工作?

Swiftui 如何让GeometryReader仅在一维中工作?,swiftui,Swiftui,我正在使用几何体读取器来控制HStack中某些子视图的水平布局。最终,子视图的间距必须相等,并且它们的编号不是固定的。这工作正常,没有任何问题 但是,仅由内容(子视图)确定的垂直布局将由几何体读取器扩展到最大可用高度(这是标准行为) 欢迎就如何克服这种行为提出任何建议 (另一种解释问题的方法是说水平几何读取器将解决该问题) 为清晰起见,特此添加代码片段: public struct ToolbarView: View { @ObservedObject public var v

我正在使用几何体读取器来控制HStack中某些子视图的水平布局。最终,子视图的间距必须相等,并且它们的编号不是固定的。这工作正常,没有任何问题

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

欢迎就如何克服这种行为提出任何建议

(另一种解释问题的方法是说水平几何读取器将解决该问题)

为清晰起见,特此添加代码片段:

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))
    }
}

正如您在评论中所注意到的,垫片将在不使用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))
}

HStack中的等间距视图不需要GR。GR在这里做什么?请您只显示代码并指出问题所在?对不起,我在解释问题时出错了。视图由下面带有文本的图像组成。两者都垂直居中。为了看起来好看,所有视图的大小必须相等。使用几何导引头获得相同的尺寸。我曾考虑使用间隔符来获得相同的效果,但由于文本长度不同,这不适用于外观要求。同样,这一切都可以正常工作,但GeometryReader在垂直轴上的布局存在问题。