当其字体调整为可用宽度时,如何使多行标签的高度正确?

时间:2019-06-26 14:18:00

标签: ios autolayout uilabel

我设计了一个包含两个标签的视图。标题文本是可变的,它对于长标题和短标题都应该看起来不错,因此将其设置为支持多行文本(numberOfLines0),直到没有更多可用空间为止。点字体应该缩小(adjustsFontSizeToFitWidthtrue)。

为了演示我的问题,我使用了恒定的标题文本并调整了容器的高度。

  1. 当容器的高度足以容纳两个标签时,一切看起来都与预期一样。

  1. 只要高度不够,就不会剪切标题标签的字体,而是会剪切字幕。

  1. 我们通过subtitleLabel.setContentCompressionResistancePriority(.required, for: .vertical)防止了这种情况。情况看起来更好。字幕标签将恢复到正确的高度,而标题标签的字体将减少。

  1. 让我们再次降低高度。字幕标签看起来仍然不错。标题标签再次调整其字体,但是顶部和底部的填充量很大。这是有道理的-不再有足够的高度来容纳三行标题,因此字体大小会缩小直到适合两行。但是我们希望标签本身降低其高度以拥抱内容,而不是将标题搁浅在一片海洋中。

预期的布局

我尝试过的事情:

  • 让我们鼓励它使用titleLabel.setContentHuggingPriority(.required, for: .vertical)来做到这一点。不幸的是,没有变化。
  • 让我们删除该行,然后尝试其他操作。我们已经read尝试降低标题标签titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .vertical)上的内容压缩优先级。没变化。
  • 另一个suggestion是在标题标签上设置最小比例因子。让我们尝试titleLabel.minimumScaleFactor = 0.5。没变化。
  • 即使我们已经固定在超级视图上,也许我们还是应该set a width constraint?没变化。
  • 一些地方建议设置标签的preferredMaxLayoutWidth以匹配标签的宽度,但这也无济于事。

还有其他建议吗?有没有办法使用自动布局完成此设计?

1 个答案:

答案 0 :(得分:1)

自定尺寸标签(自动调整其高度以适合其内容的条件)和带有自定尺寸文本的标签(字体大小更改为适合高度)的条件是相反的。前者假定字体大小固定且高度灵活。后者假定字体大小灵活且高度固定。

您似乎在问是否可以一次自动地同时拥有两者。不,你不能。如果您想要一个自定义大小的标签,一旦超出一定数量的文本,字体大小就会变小,您必须使字体大小变小。