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。中间的标签彼此之间的间距应该相同,但如果其中一个标签变大(当文本的大小长于宽度并且发生换行时),也应该进行调整。
为此,我尝试了以下方法:
将标签组织为堆栈视图:
快完成了,我这里唯一的问题是,
标签是在显示堆栈视图后计算的,这导致错误的 constraints/paddings/margins 在运行时应用于(可能)较长的文本。
组织具有规则约束的标签
我试过设置
中间标签的约束优先级低于
最上面和最下面的那些,所以那些就是那些
调整大小,如果标签放大,但看起来在
运行时其中一个被选择收缩,而其他的
保持默认大小。
如果你能帮助我,我将不胜感激,约束似乎总是让我的脖子痛...
我认为您的情况下的最佳做法确实是使用 UIStackView
。那么你有多种选择来解决这个问题:
- 您可以将
UIStackView
的分配设置为 Fill Proportionally
,并将 Minimum Font Size
或 Minimum Font Scale
设置为您的 UILabels
。
- 您还可以将
UIStackView
的分布设置为 Fill
,然后手动指定容器的高度。 UILabels
应该还有一些 Minimum Font Size
或 Minimum Font Scale
.
编辑:
我刚刚意识到您想让所有 UILabels
具有相同的字体大小。那么一个可能的解决方案是将 UIStackView
嵌入到 UIScrollView
中并约束 UIStackView's
Leading
、Trailing
、Top
和 Bottom
对 UIScrollView.
的 ContentView
的约束 这样,UIScrollView
的高度将根据 UIStackView
所需的高度进行调整。
希望对您有所帮助!
同意...我认为 UIStackView 工作正常,只需正确设置即可。
此外,您可能需要在设置文本时在标签上调用 .sizeToFit。
我为您提供了一个示例 - 尺寸不准确,但您应该能够遵循该技巧...
我正在构建一个 iOS 应用程序,其中包含一个测验。问题显示在屏幕的上部(见下文)。总是有五个可能的答案。问题是:答案是按程序生成的,长度各不相同,这有时会导致标签中出现换行符。
This is the current state
可能从图片上看不太清楚,但是第一个和第二个、第二个和第三个之间的间距和我想要的不一样。
This is what I had in mind
本质上,我希望最顶部和最底部的标签对容器具有相同的 space。中间的标签彼此之间的间距应该相同,但如果其中一个标签变大(当文本的大小长于宽度并且发生换行时),也应该进行调整。
为此,我尝试了以下方法:
将标签组织为堆栈视图:
快完成了,我这里唯一的问题是, 标签是在显示堆栈视图后计算的,这导致错误的 constraints/paddings/margins 在运行时应用于(可能)较长的文本。
组织具有规则约束的标签
我试过设置 中间标签的约束优先级低于 最上面和最下面的那些,所以那些就是那些 调整大小,如果标签放大,但看起来在 运行时其中一个被选择收缩,而其他的 保持默认大小。
如果你能帮助我,我将不胜感激,约束似乎总是让我的脖子痛...
我认为您的情况下的最佳做法确实是使用 UIStackView
。那么你有多种选择来解决这个问题:
- 您可以将
UIStackView
的分配设置为Fill Proportionally
,并将Minimum Font Size
或Minimum Font Scale
设置为您的UILabels
。 - 您还可以将
UIStackView
的分布设置为Fill
,然后手动指定容器的高度。UILabels
应该还有一些Minimum Font Size
或Minimum Font Scale
.
编辑:
我刚刚意识到您想让所有 UILabels
具有相同的字体大小。那么一个可能的解决方案是将 UIStackView
嵌入到 UIScrollView
中并约束 UIStackView's
Leading
、Trailing
、Top
和 Bottom
对 UIScrollView.
的 ContentView
的约束 这样,UIScrollView
的高度将根据 UIStackView
所需的高度进行调整。
希望对您有所帮助!
同意...我认为 UIStackView 工作正常,只需正确设置即可。
此外,您可能需要在设置文本时在标签上调用 .sizeToFit。
我为您提供了一个示例 - 尺寸不准确,但您应该能够遵循该技巧...