为什么我不能 H-Centering 并为 StackView 中的元素提供固定宽度

Why I can't H-Centering and give fixed width to element inside StackView

我的问题一直是如何在堆栈视图中将一个元素居中

请看我下面的截图说明:

编号 1) 是主要的 StackView

数字 2) 是相关的 StackView,我想让它的内容(3 号中的 UIView)居中

Number 3) 这个UIView我想把它放在No.2里面居中,并给它一个较小的宽度来匹配图中的蓝线

注意:问题是当我在 3 号中给 UIView 一个固定宽度时,它总是影响主 StackView 后面的滚动视图并缩小它!!

下面是1号主StackView的配置

下面是2号子StackView的配置

正如我所说,当我在No.3中给UIView设置固定宽度时,它总是缩小并损坏App后台的scrollView

请问您能帮忙解决这个问题吗?

我假设您实际上并不想要 绿色 颜色 - 这只是为了让视图可见。

您可能想要做的是在绿色视图中嵌入水平堆栈视图(包含两个按钮),而不是相反(就像您现在拥有的那样)。

像这样尝试:

MainStack 设置:

BtnsStack 设置(我猜你想在按钮之间设置一些 space - 我使用了 8):

这是 运行 时间的样子,绿色 BtnsStackHolderView 背景设置为清晰:

并且旋转以显示按钮保持水平居中:


编辑 如何在不将绿色视图嵌入另一个视图的情况下将其居中放置在 stackView 中?

您的绿色视图未在堆栈视图中居中的原因是您将堆栈视图的 Alignment 设置为 Fill,这会拉伸排列的子视图以填充堆栈视图的宽度.

对于具有 Vertical 轴的堆栈视图,对齐选项为:

  • 填充
  • 领先
  • 居中
  • 尾随

这里是一个 Center 的例子(堆栈视图本身被限制在距离边缘 40 点的顶部/前导/尾随):

从底部开始...

蓝色 wEqToStack h60 视图受限:

  • 身高=60
  • 宽度等于堆栈视图的宽度

黄色 w200 h60 视图受限:

  • 宽度=200
  • 身高=60

橙色 wNone h60 视图受限:

  • width = 未设置宽度约束
  • 身高=60

绿色 BtnsStackHolderView 没有宽度或高度限制...它的大小由对其内容的限制决定(BtnsStack 每边 20 磅)。

如果我们运行这个,我们看到(红色虚线只是为了显示堆栈视图的框架):

糟糕!橙色视图去哪儿了?由于我们没有给它一个宽度约束,并且堆栈视图的 Alignment 设置为 Center,它最终的宽度为零。

因此,如果堆栈视图中的大多数视图都定义了自己的宽度,则使用居中可减少所需的“包含”视图的数量。但是,如果大多数视图需要拉伸堆栈视图的宽度,那么将您想要居中的内容嵌入到“包含”视图中可能会更容易。