首页 > 解决方案 > 为什么我不能 H 居中并为 StackView 中的元素提供固定宽度

问题描述

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

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

在此处输入图像描述

数字 1) 是主 StackView

数字 2) 是我想让它的内容 ( UIView in No 3 ) 以它为中心的相关 StackView

3号)这个UIView我想把它放在2号里面,并给它一个更小的宽度,与图片中的蓝线相匹配

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

下面是No.1中主StackView的配置

在此处输入图像描述

下面是2号子StackView的配置

在此处输入图像描述

正如我所说,当我在 No.3 中为 UIView 提供固定宽度时,它总是会缩小并损坏 App 背景中的 scrollView

那么你能帮助如何处理这个问题吗?

标签: xcodealignmentcenteringuistackviewstackview

解决方案


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

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

试试这样:

在此处输入图像描述

MainStack 设置:

在此处输入图像描述

BtnsStack 设置(我猜你想在按钮之间留一些空间 - 我用过8):

在此处输入图像描述

这是它在运行时的样子,绿色BtnsStackHolderView背景设置为清除:

在此处输入图像描述

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

在此处输入图像描述


编辑 如何在 stackView 中居中绿色视图而不将其嵌入另一个视图中?

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

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

  • 充满
  • 领导
  • 中心
  • 尾随

这是一个示例Center(堆栈视图本身从边缘被限制在顶部/前导/尾随 40 分):

在此处输入图像描述

从底层开始...

蓝色wEqToStack h60视图受到限制:

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

黄色w200 h60视图受到限制:

  • 宽度 = 200
  • 高度 = 60

橙色wNone h60视图受到限制:

  • 宽度 =没有设置宽度约束
  • 高度 = 60

并且绿色BtnsStackHolderView没有宽度或高度限制......它的大小取决于对其内容的限制(BtnsStack每边有 20 分)。

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

在此处输入图像描述

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

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


推荐阅读