我正在使用Geometry Reader来控制HStack中某些子视图的水平布局。最终,子视图必须等距隔开,并且其编号不是固定的。可以正常工作,没有任何问题。
但是,垂直布局仅由内容(子视图)确定,并由几何读取器扩展到最大可用高度(这是标准行为)。
欢迎提出任何有关如何克服这种行为的建议吗?
(解释问题的另一种方式是说,使用 Horizontal 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))
}
}
答案 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))
}