ios swift5 UIlabel calcula la altura y el ancho de acuerdo con el texto (contenido), la altura es adaptable, pero el límite de alturaRectWithSize debe conocerse de antemano

0. Agregue un método a la extensión de la etiqueta, primero configure el texto de la etiqueta, pase el ancho, puede obtener la altura de la etiqueta (es una optimización de 1 y 2)

extension UILabel {
    
    
    func labelHeight(width:CGFloat)->CGFloat{
    
    
        let dic = [NSAttributedString.Key.font : font]
        let size = CGSize(width: width, height: 0)
        let rect = text!.boundingRect(with: size, options: [.usesFontLeading,.usesLineFragmentOrigin], attributes: dic, context: nil)
        return CGFloat(ceilf(Float(rect.size.height)))
    }
}

Por favor agregue la descripción de la imagen

1. La siguiente captura de pantalla mide la altura calculada por el texto y la altura de la etiqueta (establecida en 200) cuando realmente se muestra, ambas son 255, lo cual es consistente

Por favor agregue la descripción de la imagen

2. Código

class tableViewTestVC: UIViewController{
    
    
    lazy var label:UILabel = {
    
    
       let label = UILabel()
        label.backgroundColor = .yellow
        let font =  UIFont.init(name: "PingFang SC", size: 14)!
        label.font = font
        label.numberOfLines = 0
        let str:NSString = "但是公司的高度是广东省公司的广东省高速度来开个大帅哥多撒谎个爱好就跟他说噶三公司噶是的刚好是我哥如果黑暗如果坏都干撒降低公司及嘎斯进欧冠赛欧结果就赛欧国际韶关;可垃圾费;阿尔加两块;三个身高萨嘎干撒的公司的高度上收到公司的公司都给ID搜狗破is打个屁偶是东莞IP手动皮革是滴哦苹果是滴哦苹果度搜皮为欧公司的漂漂是第三个是干撒噶是的噶虽然刚撒旦个撒公司的公司的高度"
        label.text = str as String
        let attriText = NSMutableAttributedString(string: str as String)
        let dic = [NSAttributedString.Key.font : font]
        let size = CGSize(width: 200, height: 0)
        let rect = str.boundingRect(with: size, options: [.usesFontLeading,.usesLineFragmentOrigin], attributes: dic, context: nil)
        printXY(label, obj: self, line: #line)
        printXY(rect, obj: self, line: #line)
        printXY(ceilf(Float(rect.size.height)), obj: self, line: #line)
        return label
    }()
    override func viewDidAppear(_ animated: Bool) {
    
    
        printXY(label, obj: self, line: #line)
    }
    override func viewDidLoad() {
    
    
        super.viewDidLoad()
        view.addSubview(label)
        label.snp.makeConstraints {
    
     (make) in
            make.top.equalToSuperview().offset(30)
            make.left.equalToSuperview().offset(10)
            make.width.equalTo(200)
        }
    }
    
}

3. Blog de referencia:

Sugerencias para iOS UseboundingRectWithSize para calcular la altura del contenido
Comprenda el uso y el significado de cada opción de NSStringDrawingOptions
[desarrollo de iOS] Calcule la altura según el texto en
iOS Desarrollo de iOS | Contenido adaptable de altura de celda simple y realista y cálculo avanzado y altura de celda de caché

Supongo que te gusta

Origin blog.csdn.net/baidu_40537062/article/details/123915035
Recomendado
Clasificación