当字体大小大于标签高度

时间:2017-10-18 08:43:16

标签: ios swift uilabel clipping

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

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

我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

您应该可以从font.lineHeight获取字体高度,然后缩小字体大小,直到行高低于标签高度。

答案 1 :(得分:0)

查看UILabel的文档:

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

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

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

希望有所帮助。

答案 2 :(得分:0)

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

  

解决方案

您可以在UIButton顶部嵌套一个单独的UILabel,它将解决此问题。很难看,但是可以用。您应该尝试几种解决方法。

  

解决方法

根据情况,这里有一个小清单,我发现它是被接受的答案或对某人有用。

1)如果您使用的是UIButton,请确保使用此方法

[button setTitle forState:]

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

[myButton setNeedsLayout];

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

[yourLabel setAdjustsFontSizeToFitWidth:YES];

3)尽管设置clipToBounds可以在连续的层次结构中进行,但是您可能不想在Button或Label上分别进行设置。

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

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