【问题标题】:Prevent UILabel from clipping it's text when the font size is larger than the label height当字体大小大于标签高度时,防止 UILabel 剪切它的文本
【发布时间】:2018-03-30 02:03:05
【问题描述】:

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

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

我错过了什么吗?

【问题讨论】:

  • 增加标签的内容抗压缩优先级怎么样?
  • 您可能还需要检查label.layer.maskToBounds = false
  • 期望的行为是什么?
  • @Wez 我可以确认它是,此外,视图调试器会在运行时验证两者都是错误的。
  • @Hexfire 目标是让标签不剪掉它的文本底部。例如,我有一个 15pt 高度的标签和一个 30pt 大小的字体。当标签剪切下半部分时,只有文本的前 15pts 可见。我希望这种剪辑不会发生,正如我对masksToBounds = false 所期望的那样。

标签: ios swift uilabel clipping


【解决方案1】:

查看 UILabel 的文档:

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

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

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

希望对您有所帮助。

【讨论】:

  • 这个想法很有意思,我试试看!
  • Shoot,因为我使用的是 AsyncDisplayKit 并且标签被包装在一个带有抽象视图的 ASTextNode 中,所以我没有能力对 UILabel 对象进行子类化。
【解决方案2】:

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

【讨论】:

  • 问题是,文斯,我不想降低我的字体高度。我想让字体变大,这更像是我想增加标签高度以适应它。正如我在问题中所说,在我的情况下,这很难做到。因此寻找基于层裁剪的解决方案。
  • 啊,我看到你不想增加标签大小,但没有看到你也不想减小字体大小。另一种可能性可能是在现有标签的中心放置第二个标签,该标签采用文本并适当调整大小。这样,原始标签就成为屏幕布局中的占位符。 (如上所述。)
【解决方案3】:

原因(需要引用)是嵌入在 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 添加到按钮。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2018-03-22
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多