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