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

2019-01-02  本文已影响29人  小曼blog

项目中常用到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,在使用计算属性。

上一篇下一篇

猜你喜欢

热点阅读