UILabel或UITextView的智能字幕

时间:2015-06-06 09:12:52

标签: objective-c uitextfield uilabel uitextview sizetofit

我想像SoundCloud应用程序那样创建一个智能标题。 请参阅下面的附件,

enter image description here

这两个标题: - •PAN• - 德国柏林

是我想创造的。

这些字幕似乎由sizeToFit或sizeThatFits执行。但是,如果使用带有背景颜色的sizeThatFits(通过NSBackgroundColorAttributeName),则不会在第一个字母之前和最后一个字母以及顶部和底部填充之前得到填充。 标题将按照这些字母的大小进行组织。

enter image description here

无论如何,我想做的是与附件图片完全相同的标题。

干杯,

2 个答案:

答案 0 :(得分:0)

这里有两种方法。一种是在调用sizeThatFits后添加一些填充。另一种方法是在标签标题前加上一个空格。

但是,添加填充的正确方法是扩展UILabel并在子类上覆盖方法textRectForBounds:limitedToNumberOfLines:。在那里,只需在super上通过您收到的bounds调用相同的方法,只需更小。

答案 1 :(得分:0)

我知道这是一个老问题,但我正在寻找与SoundCloud标签相同的效果。 这是uilabel的子类

    import UIKit

    class LabelPine: UILabel {

override func drawTextInRect(rect: CGRect) {
    let insets = UIEdgeInsets.init(top: 5, left: 0, bottom: 5, right: 3)
    super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}

override func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
    super.textRectForBounds(bounds, limitedToNumberOfLines: 0)

    return CGRectInset(self.attributedText!.boundingRectWithSize(CGSizeMake(999, 999), options: .UsesLineFragmentOrigin, context: nil), -5, -5)




    }
}

以下是相应课程的实施:

   labelNombre = LabelPine()
    labelNombre?.text = nombreUser
    labelNombre?.frame = CGRectMake(10, nombrePos.Yo, nombrePos.ancho, nombrePos.alto)
    labelNombre?.font = UIFont(name:"Hiragino Sans W3",size: 19)!
    labelNombre?.textAlignment = .Left
    labelNombre?.backgroundColor = UIColor(white: 1, alpha: 0.5)
    labelNombre?.textColor = colorBlentUIColor
    labelNombre?.sizeToFit()

    header?.addSubview(labelNombre!)

请注意我调用sizeToFit()。