美文网首页
swift:记录UILabel的扩展,计算label的实际高度以

swift:记录UILabel的扩展,计算label的实际高度以

作者: 小曼blog | 来源:发表于2019-01-02 15:10 被阅读29次

    项目中常用到label的实际高度,有时也会需要知道label的实际行数是多少,系统的numberOfLines属性,只是设置label的最多显示的行数,而不是实际的行数。
    我们写一个label的扩展,把需要的值作为属性计算出来,我们知道,在swift中,是可以使用计算属性的。

    //
    //  UILabel+Ext.swift
    //
    //  Created by weiman on 2019/1/2.
    //  Copyright © 2019 weiman. All rights reserved.
    //
    
    import Foundation
    
    extension UILabel {
        
        /// UILabel根据文字的需要的高度
        public var requiredHeight: CGFloat {
            let label = UILabel(frame: CGRect(
                x: 0,
                y: 0,
                width: frame.width,
                height: CGFloat.greatestFiniteMagnitude)
            )
            label.numberOfLines = 0
            label.lineBreakMode = .byWordWrapping
            label.font = font
            label.text = text
            label.attributedText = attributedText
            label.sizeToFit()
            return label.frame.height
        }
        
        /// UILabel根据文字实际的行数
        public var lines: Int {
            return Int(requiredHeight / font.lineHeight)
        }
    }
    
    

    使用:

    nameLabel.numberOfLines = nameLabel.lines > 1 ? 2 : 1
    
    

    注意:
    如果你是使用autolayout进行布局的,在使用这个属性的时候,一定要保证label的frame是正确的,尤其是宽度,一定要是准确的。如果不准确,请使用layoutIfNeeded(),确定一下frame,在使用计算属性。

    相关文章

      网友评论

          本文标题:swift:记录UILabel的扩展,计算label的实际高度以

          本文链接:https://www.haomeiwen.com/subject/beuzlqtx.html