UILabel 或 UITextView 的智能字幕

Posted

技术标签:

【中文标题】UILabel 或 UITextView 的智能字幕【英文标题】:Smart caption by UILabel or UITextView 【发布时间】:2015-06-06 09:12:52 【问题描述】:

我想像 SoundCloud 应用一样创建智能字幕。 见下面的附件,

这两个标题: - •平底锅• - 德国柏林

是我想要创建的。

这些字幕似乎是由 sizeToFit 或 sizeThatFits 执行的。但是,如果将 sizeThatFits 与背景颜色一起使用(通过 NSBackgroundColorAttributeName),您将不会在第一个字母之前和最后一个字母之后以及顶部和底部填充都获得填充。 标题将按照这些字母的精确尺寸进行组织。

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

干杯,

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢您的建议。我将尝试根据您的流程进行测试。如果工作会告诉你!如果您不介意,可以与我分享一个示例代码的 sn-p 吗?【参考方案2】:

我知道这是一个老问题,但我一直在寻找 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()。

【讨论】:

以上是关于UILabel 或 UITextView 的智能字幕的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动视图中使 UIImage 低于 UILabel 或 UITextView

iOS UITextView 或 UILabel 带有可点击的动作链接[重复]

带有 html 超链接的 UITextView 或 UILabel

UILabel 或 UITextView 在两行中带有第一个字母非常大的字体

UITextView vs UILabel 高度计算

是否可以制作一个 UILabel、UITextView 或类似的东西,它总是在不截断的情况下调整其高度以适应其在 Interface Builder 中的内容?