Xcode:将可变高度的 UILabel 限制为固定大小的容器

Xcode: constraining varying height UILabels to fixed size container

我正在构建一个 iOS 应用程序,其中包含一个测验。问题显示在屏幕的上部(见下文)。总是有五个可能的答案。问题是:答案是按程序生成的,长度各不相同,这有时会导致标签中出现换行符。

This is the current state

可能从图片上看不太清楚,但是第一个和第二个、第二个和第三个之间的间距和我想要的不一样。

This is what I had in mind

本质上,我希望最顶部和最底部的标签对容器具有相同的 space。中间的标签彼此之间的间距应该相同,但如果其中一个标签变大(当文本的大小长于宽度并且发生换行时),也应该进行调整。

为此,我尝试了以下方法:

如果你能帮助我,我将不胜感激,约束似乎总是让我的脖子痛...

我认为您的情况下的最佳做法确实是使用 UIStackView。那么你有多种选择来解决这个问题:

  1. 您可以将 UIStackView 的分配设置为 Fill Proportionally,并将 Minimum Font SizeMinimum Font Scale 设置为您的 UILabels
  2. 您还可以将 UIStackView 的分布设置为 Fill,然后手动指定容器的高度。 UILabels 应该还有一些 Minimum Font SizeMinimum Font Scale.

编辑:

我刚刚意识到您想让所有 UILabels 具有相同的字体大小。那么一个可能的解决方案是将 UIStackView 嵌入到 UIScrollView 中并约束 UIStackView's LeadingTrailingTopBottomUIScrollView.ContentView 的约束 这样,UIScrollView 的高度将根据 UIStackView 所需的高度进行调整。

希望对您有所帮助!

同意...我认为 UIStackView 工作正常,只需正确设置即可。

此外,您可能需要在设置文本时在标签上调用 .sizeToFit。

我为您提供了一个示例 - 尺寸不准确,但您应该能够遵循该技巧...

https://github.com/DonMag/StackViewFun