如何使 UITableView 在 UIStackView 内以 X 和 Y 为中心

Posted

技术标签:

【中文标题】如何使 UITableView 在 UIStackView 内以 X 和 Y 为中心【英文标题】:How to keep UITableView centered on X and Y inside an UIStackView 【发布时间】:2017-07-02 17:43:24 【问题描述】:

我在一个垂直的UIStackView 中有一个UILabel 和一个UITableView。我希望这个堆栈视图始终保持居中,即使将元素添加到表视图中也是如此。

现在我在堆栈视图中添加了Horizontal in ContainerVertical in Container 约束。但它仍然说堆栈视图缺少 Y 约束。如果我添加一个,那么它将不再居中。

知道我应该添加什么约束以使其始终居中吗?

以下是我想要的堆栈视图的两个屏幕截图和一个我现在拥有的屏幕截图:

第二张图片我添加了从堆栈视图到标题的垂直空间约束,这就是它看起来像这样的原因。

【问题讨论】:

您可能必须在堆栈视图中调整方向和间距设置才能获得所需的内容。堆栈视图要记住的一件事是,您很少能以 100% 的方式让它看起来像您想要的那样。您可以更轻松地使用堆栈视图,但可以通过硬约束 IMO 进行更多控制 【参考方案1】:

mmm... 前段时间我收到了来自客户的同样请求,问题是表格视图不应该那样使用,因为如果添加太多项目,表格将在两个垂直方向都增长方向,那根本不好……但是!据我所见,你的单元格大小都一样,所以,这就是我所做的,因为我的表格有几行有限的行,而且它们的大小都一样:

我向 tableView 添加了一个高度约束,并将其作为 IBOutlet 扔给它所属的类。获得任务的行数后,您可以通过乘以单元格固定高度的行数来更新您拥有的 tableView 高度约束的常量值。这样,您的 tableView 将具有由它包含的行数定义的高度。您可能应该只转储堆栈视图,单独使用 tableView 并在考虑到我提到的这个高度约束的情况下为您的 tableView 添加一些大小和居中约束......特别是:

您喜欢的前导/尾随或宽度,在容器内垂直居中以及您将在运行时修改的高度约束。

【讨论】:

【参考方案2】:

顺便说一句,你的堆栈视图占据了整个屏幕,我觉得你应该使用导致容器的正常约束,拖到容器,底部空间到容器,顶部空间到垂直。

想一想,如果你添加了这四个约束,无论你在哪个设备上运行它,你的堆栈视图仍将始终水平和垂直居中,因为设置这四个约束将始终确保堆栈视图保持与超级视图边距的恒定距离,在您的情况下,对于所有约束,该距离均为 0

【讨论】:

我在标题中添加了前导、尾随和顶部约束,在按钮中添加了底部约束,但所有内容都在顶部,而不是中间。我的堆栈视图对齐和分布设置为填充。 将它们设置为均匀填充并调整您的自定义间距 但是如果我这样做,标签和表格视图之间的差距太大了,因为它试图使标签与表格视图的大小相同,对吧? 正确,尝试在标签上添加宽度和高度约束,然后插入到stackview中 我这样做了,但显然堆栈视图缩小了,并且顶部的标题增加了,因为它的约束。我尝试使用拥抱内容属性,但仍然是同样的问题。标题现在占据了屏幕的一半以上,而 stackview 位于底部。

以上是关于如何使 UITableView 在 UIStackView 内以 X 和 Y 为中心的主要内容,如果未能解决你的问题,请参考以下文章

滚动时如何使uitableview单元格不改变?

如何使 UITableView 的部分标题完全透明

如何使 UITableView 内容围绕中心点滚动

滚动时如何使 UITableView 从下到上显示?

如何使 UITableView 在 UIStackView 内以 X 和 Y 为中心

如何使 UITableView 适合内容的大小