没有为 UILabel 获得正确的行数

Posted

技术标签:

【中文标题】没有为 UILabel 获得正确的行数【英文标题】:Not Getting Correct Line Count For UILabel 【发布时间】:2016-10-19 08:54:11 【问题描述】:
 value = UILabel(frame: CGRect(x: 5 ,y: 5, width:Int(self.view.frame.width - 140) ,height: 16 ))
        value.numberOfLines = 0
        value.font = UIFont.systemFont(ofSize: 14.0)
       value.lineBreakMode = .byWordWrapping
        value.text = ((items["comment"] as? String) ?? "")!
        value.setLineHeight(lineHeight: CGFloat(1))
        var lineCount = 0;
        let textSize = CGSize(width: value.frame.size.width, height: CGFloat(Float.infinity));
        let rHeight = lroundf(Float(value.sizeThatFits(textSize).height))
        let charSize = lroundf(Float(value.font.lineHeight));

        lineCount = rHeight/charSize
        print(lineCount)
       

当试图获取该 UILabel 中的行数时。它总是给我一个比实际行数更多的..

extension UILabel 
func setLineHeight(lineHeight: CGFloat) 
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 1.0
    paragraphStyle.lineHeightMultiple = lineHeight
    paragraphStyle.alignment = self.textAlignment

    let attrString = NSMutableAttributedString(string: self.text!)
    attrString.addAttribute(NSFontAttributeName, value: self.font, range: NSMakeRange(0, attrString.length))
    attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
    self.attributedText = attrString

【问题讨论】:

尝试使用属性字符串。 ***.com/questions/14409897/… 对不起@Aks 我没有得到你?..我看到了那个链接..但我只对行数感兴趣 能否分享一下setLineHeight方法的代码 @NaveenRamanathan 是的,但如果我删除它也不会给我正确的答案。请参阅我的编辑问题 【参考方案1】:

检查此代码。这可以正确计算行数。我已经在 XCode 8 中对其进行了测试

value = UILabel(frame: CGRect(x: 50 ,y: 50, width:Int(self.view.frame.width - 140) ,height: 400 ))
value.numberOfLines = 0
value.font = UIFont.systemFont(ofSize: 14.0)
value.lineBreakMode = .byWordWrapping
value.text = ((items["comment"] as? String) ?? "")!
let textSize = CGSize(width: value.frame.size.width, height: CGFloat(Float.infinity));
let rHeight = Float(value.sizeThatFits(textSize).height)
var lineCount:Float = 0;
let charSize = Float(value.font.lineHeight)
lineCount = floor(rHeight / charSize)
print("lineCount \(lineCount)")

【讨论】:

不,它不能解决我的问题。仍然没有准确计算边界值【参考方案2】:

我知道这对于您的需求来说可能为时已晚,但我认为问题在于您的 lineHeightMultiple

【讨论】:

以上是关于没有为 UILabel 获得正确的行数的主要内容,如果未能解决你的问题,请参考以下文章

根据包含的文本设置 UILabel 的行数 - Objective C 和/或 Swift

当 UITableViewCell 中的行数固定时,UILabel 占用空间?

如何找到 UILabel 的行数

动画改变 UILabel 的行数

swift iOS Swift:如何检查UILabel是否被截断?计算UILabel的行数

当UITableViewCell被点击时,UILabel未按预期更新的行数