首页 文章

UILabel子类 - 尽管标签高度正确,文字在底部切断

提问于
浏览
9

我有一个问题,UILabel子类切断底部的文本 . 标签的高度适合文本,底部留有一些空间,但文本仍然被剪掉 .

The label

红色条纹是添加到标签图层的边框 .

我将标签子类化以添加边缘插入 .

override func sizeThatFits(size: CGSize) -> CGSize {
    var size = super.sizeThatFits(size)
    size.width += insets.left + insets.right
    size.height += insets.top + insets.bottom
    return size
}

override func drawTextInRect(rect: CGRect) {
    super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}

但是,在这种特殊情况下,插入是零 .

4 回答

  • 2

    事实证明问题在于

    self.lineBreakMode = .ByClipping
    

    改变它

    self.lineBreakMode = .ByCharWrapping
    

    解决了这个问题

  • 9

    在为同时提供topAnchor和centerYAnchor标签时发生的事情发生了 . 只留下一个锚就解决了这个问题 .

  • 1

    我的问题是标签的(垂直)内容压缩阻力优先级不够高;将其设置为必需(1000)修复它 .

    看起来其他非OP答案可能是针对同一个潜在问题的某种解决方法 .

  • 0

    其他答案对我没有帮助,但是将标签的高度限制在所需的任何高度,例如:

    let unconstrainedSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
    label.heightAnchor.constraint(equalToConstant: label.sizeThatFits(unconstrainedSize).height).isActive = true
    

    此外,如果您的标签 text 字段为 nil 或等于 ""sizeThatFits(_:) 将返回 0 by 0 大小

相关问题