我设计了一个包含两个标签的 View 。标题文本是可变的,短标题和长标题都应该看起来不错,所以它被设置为支持多行文本(numberOfLines
is 0
)直到没有更多可用空间,此时字体应该缩小(adjustsFontSizeToFitWidth
为 true
)。
为了演示我的问题,我使用不变的标题文本并改为调整容器的高度。
- 当容器的高度足以容纳两个标签时,事情看起来符合预期。
- 一旦高度不够,字幕就会被剪掉,而不是缩小标题标签的字体。
- 我们通过
subtitleLabel.setContentCompressionResistancePriority(.required, for: .vertical)
防止这种情况。事情看起来好多了。字幕标签恢复到正确的高度,而标题标签的字体变小了。
- 让我们再次降低高度。字幕标签看起来还是不错的。标题标签再次调整其字体,但有大量的顶部和底部填充。这是有道理的——三行标题的高度已经不够用了,所以字体大小会缩小,直到适合两行。但我们希望标签本身降低其高度以拥抱内容,而不是将标题搁浅在太空的海洋中。
预期布局
我尝试过的事情:
- 让我们尝试使用
titleLabel.setContentHuggingPriority(.required, for: .vertical)
来鼓励它这样做。不幸的是没有变化。 - 让我们删除该行并尝试其他方法。我们有 read我们应该尝试降低标题标签上的内容压缩优先级:
titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
。没有变化。 - 另一个 suggestion是在标题标签上设置一个最小比例因子。让我们试试
titleLabel.minimumScaleFactor = 0.5
。没有变化。 - 也许我们应该set a width constraint ,即使我们已经固定到 super View ?没有变化。
- 有几个地方建议设置标签的
preferredMaxLayoutWidth
以匹配标签的宽度,但这也没有帮助。
还有其他建议吗?有没有办法使用自动布局来完成此设计?
最佳答案
自调整标签(自动调整其高度以适应其内容)和具有自调整文本的标签(字体大小改变以适应高度)的条件是相反的。前者假定固定的字体大小和灵活的高度;后者采用灵活的字体大小和固定的高度。
您似乎在问是否可以自动同时拥有两者。不,你不能。如果您想要一个自调整大小的标签,一旦超过一定数量的文本,字体大小就会变小,您必须缩小字体大小。
关于ios - 当多行标签的字体调整以适应可用宽度时,如何使多行标签的高度正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56774992/