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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,547评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,521评论 4 61
  • 我要拿自己做实验 既然实验对象是自己 那就要承担所有的后果 无论成功不成功 都是 一种独特的人生经历 实验的对象 ...
    MK袁景文阅读 712评论 0 1
  • 1、下午放学时就告诉我:今天的作业全部做完了。恭喜宝贝,现在做作业速度越来越快了。 2、昨晚跟妈妈商量想今天早上多...
    段师傅贴膜阅读 428评论 0 2
  • 办公室缓解压力的几个小动作 2010-03-12 10:26来源:99健康网| 声明:图片来源网络,如有侵权,敬请...
    卿真阅读 261评论 0 0

友情链接更多精彩内容