我的应用程序中存在一种情况,即标签的字体大小可能大于其高度。这与一些相当复杂的体系结构和布局代码有关。通常情况下,我会增加标签的高度以适应更大的字体,但在我的情况下,这很难做到,我宁愿避免它
下一个合乎逻辑的事情是关闭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添加到按钮中。