防止 UILabel 在字体大小大于标签高度时剪切其文本



我的应用程序中存在一种情况,即标签的字体大小可能大于其高度。这与一些相当复杂的体系结构和布局代码有关。通常情况下,我会增加标签的高度以适应更大的字体,但在我的情况下,这很难做到,我宁愿避免它

下一个合乎逻辑的事情是关闭clipsToBounds,以允许文本子层溢出标签的边界。不幸的是,在这种情况下,这似乎没有任何效果,因为文本仍然是剪辑的。

我是不是错过了什么?

查看UILabel:的文档

https://developer.apple.com/documentation/uikit/uilabel/1620545-textrect

我认为您需要重写方法textRect(forBounds:limitedToNumberOfLines:),方法是将此方法返回的矩形显式增加到标签字符串的包含大小,而不是标签的边界。

(这个解决方案当然需要您进行子类化。)

希望能有所帮助。

您应该能够从font.lineHeight获得字体高度,然后减小字体大小,直到行高度小于标签高度。

原因(需要引用)是嵌入UIButton中的UILabel关心嵌入字体中的额外字形信息,而独立的UILabel则不关心。

解决方案

您可以在UIButton上嵌套一个单独的UILabel,它将解决问题。它很难看,但很管用。你应该尝试的变通办法很少。

解决方案

根据具体情况,这里有一个小清单,我认为它是公认的答案或对某人有用。

1) 如果你正在使用UIButton,请确保你使用的是这种方法

[button setTitle forState:]

否则,您需要使用以下代码来刷新状态

[myButton setNeedsLayout];

2) 您可能需要调整字体大小以适应标签的宽度。

[yourLabel setAdjustsFontSizeToFitWidth:YES];

3) 尽管设置clipToBounds在连续层次中有效,但您可能不希望在按钮或标签上单独设置。

[yourButton setClipsToBounds:NO];
[yourButton.titleLabel setClipToBounds:NO];

很少有解决方案指向UIButton子类化方法,这些方法本质上是试图将UIEdgeInset添加到按钮中。

最新更新