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

Posted

技术标签:

【中文标题】Xcode:将不同高度的 UILabel 限制为固定大小的容器【英文标题】:Xcode: constraining varying height UILabels to fixed size container 【发布时间】:2017-02-16 20:42:09 【问题描述】:

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

This is the current state

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

This is what I had in mind

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

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

将标签组织为堆栈视图:

几乎工作了,我这里唯一的问题是, 标签是在显示堆栈视图后计算的,这会导致在运行时将错误的约束/填充/边距应用于(可能)较长的文本。

使用常规约束组织标签

我尝试设置 中间标签的约束优先级低于 最上面和最下面的,所以那些就是那些 调整大小,如果标签放大,但似乎在 运行时其中一个被选择缩小,而其他 保持默认大小。

如果你能帮助我,我真的很感激,约束似乎总是让我头疼...

【问题讨论】:

每个答案都在一个 UITextField 中?还是一个UILabel?您想要/需要调整字体大小吗? 他们是 UILabel,会在我的问题中改变这一点,谢谢!所有答案的字体大小应保持不变。 好的 - 我添加了一个带有示例链接的答案。 【参考方案1】:

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

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

我为你举了一个例子 - 尺寸不准确,但你应该能够遵循该技术......

https://github.com/DonMag/StackViewFun

【讨论】:

您先生应该获得奖牌!像魅力一样工作,非常感谢您整理本教程,干得好! :)【参考方案2】:

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

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

编辑:

我刚刚意识到您希望所有UILabels 都具有相同的字体大小。那么一个可能的解决方案是将UIStackView嵌入UIScrollView并将UIStackView'sLeadingTrailingTopBottom约束约束到@的ContentView 987654341@ 这样UIScrollView 的高度就会根据UIStackView 需要的高度进行调整。

希望对您有所帮助!

【讨论】:

以上是关于Xcode:将不同高度的 UILabel 限制为固定大小的容器的主要内容,如果未能解决你的问题,请参考以下文章

限制 UIScrollView 内的 UILabel 的高度

AutoLayout 将 UILabel 高度设置为零

iOS 10中的UILabel,制作文字字体

具有动态 UILabel 和内容压缩/阻力的 UITableViewCell 高度不正确

根据文本动态获取UILabel的高度为iOS 7.0和iOS 6.1返回不同的值

UILabel - iOS 8 Xcode 6.3 中的单行文本占用 2 行