Xcode 为什么我能';t H-居中,并为StackView内的元素提供固定宽度

Xcode 为什么我能';t H-居中,并为StackView内的元素提供固定宽度,xcode,alignment,centering,uistackview,stackview,Xcode,Alignment,Centering,Uistackview,Stackview,我一直面临的问题是如何将堆栈视图中的一个元素居中 请看下面我的截图来解释: 1)是主堆栈视图 2)是相关的StackView,我想让它的内容(3号中的UIView)集中在里面 数字3)这个UIView我想把它放在2号的中心,并给它一个较小的宽度,匹配图中的蓝线 注意:问题是,当我给第三个UIView指定一个固定的宽度时,它总是会影响主StackView后面的滚动视图并将其缩小 下面是1号中主StackView的配置 下面是2号中的子堆栈视图的配置 正如我所说,当我给第三个UIView一个固

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

请看下面我的截图来解释:

1)是主堆栈视图

2)是相关的StackView,我想让它的内容(3号中的UIView)集中在里面

数字3)这个UIView我想把它放在2号的中心,并给它一个较小的宽度,匹配图中的蓝线

注意:问题是,当我给第三个UIView指定一个固定的宽度时,它总是会影响主StackView后面的滚动视图并将其缩小

下面是1号中主StackView的配置

下面是2号中的子堆栈视图的配置

正如我所说,当我给第三个UIView一个固定的宽度时,它总是会收缩并损坏应用程序背景中的scrollView


那么,你能帮我解决这个问题吗?

我假设你实际上并不想要绿色,那只是为了让视图可见

您可能想做的是将水平堆栈视图(包含两个按钮)嵌入到绿色视图中,而不是反过来(现在)

试着这样做:

主堆栈设置:

BTNSTACK设置(我猜您需要在按钮之间留出一些空间-我使用了
8
):

下面是它在运行时的外观,绿色
BtnsStackHolderView
背景设置为清除:

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


编辑如何将绿色视图居中放置在stackView中,而不将其嵌入其他视图中

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

对于具有垂直轴的堆栈视图,对齐选项包括:

  • 填满
  • 领先的
  • 居中
  • 拖尾
下面是一个中间有
的示例(堆栈视图本身被约束为距边缘顶部/前端/后端40点):

从底部开始

蓝色
wEqToStack h60
视图受约束:

  • 高度=60
  • 宽度等于堆栈视图的宽度
黄色
w200 h60
视图受到约束:

  • 宽度=200
  • 高度=60
橙色
wNone h60
视图受到约束:

  • 宽度=未设置宽度约束
  • 高度=60
绿色的BtnsStackHolderView
没有宽度或高度限制。。。其大小取决于对其内容的约束(每侧20个点的
btnstack

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

哎呀!橙色的风景去了哪里?由于我们没有给它一个宽度约束,并且堆栈视图的
对齐
设置为
中心
,因此它的宽度最终为零


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

是否希望绿色视图中包含两个按钮?您希望绿色视图是两个按钮的宽度吗?你想让它水平居中?是的,这正是我想要的@DonMagNo,实际上我想让绿色的视图也居中,周围有一个间隔。。。我所做的:我清空了一个视图中的绿色视图,然后我将其居中,然后通过设置背景的清晰颜色来隐藏后视图…但是,我的问题是。。。如何将绿色视图居中放置在stackView中,而不将其嵌入另一个视图???@Let.Simoo-请参阅对我答案的编辑以获取解释。哇,这是一个多么详细和出色的答案。。。谢谢你的解释,我的朋友。我真的很感激你的帮助effort@Let.Simoo-堆栈视图排列其子视图。您不会给出前导/尾随约束,因为您告诉堆栈视图水平居中该元素。您可以为其指定恒定宽度或比例宽度(例如,等于堆栈视图宽度,乘以0.8,使其成为宽度的80%)。如果Orange视图具有固有的内容大小(如
UILabel
),则无需对其进行任何约束。注意:绿色
BtnsStackHolderView
没有宽度或高度限制。。。其大小由对其内容的约束决定