zoukankan      html  css  js  c++  java
  • Swift 字符串动态计算高度

    
    

    extension String {

        // 根据字符串的实际内容,在固定的宽度和字体的大小下,动态的计算出实际的高度
        func textHeightFromTextString(text: String, textWidth: CGFloat, fontSize: CGFloat, isBold: Bool) -> CGFloat {
            if (getCurrentIOS() >= 7.0) {
                var dict: NSDictionary = NSDictionary()
                if (isBold) {
                    dict = NSDictionary(object: UIFont.boldSystemFont(ofSize: fontSize),forKey: NSAttributedString.Key.font as NSCopying)
                } else {
                    dict = NSDictionary(object: UIFont.systemFont(ofSize: fontSize),forKey: NSAttributedString.Key.font as NSCopying)
                }
                
                let rect: CGRect = (text as NSString).boundingRect(with: CGSize( textWidth,height: CGFloat(MAXFLOAT)), options: [NSStringDrawingOptions.truncatesLastVisibleLine, NSStringDrawingOptions.usesFontLeading,NSStringDrawingOptions.usesLineFragmentOrigin],attributes: dict as? [NSAttributedString.Key : Any] ,context: nil)
                return rect.size.height
            } else {
                return 0.0
            }
        }
    }

    使用:

    let titleStrHeight = "title".textHeightFromTextString(text: "title", textWidth: self.contentView.width - 32.auto(), fontSize: 16.auto(), isBold: false)

    拓展:

    动态获取UILabel高度或者宽度

    extension UILabel {
        //根据宽度动态计算高度(old)
        func getLabelHeight(_ text: NSAttributedString,  CGFloat) -> CGFloat {
            let contentHeight = text.boundingRect(with: CGSize( width, height: CGFloat(MAXFLOAT)), options: [.usesLineFragmentOrigin], context: nil).height
            return contentHeight
        }
        
        // 根据宽度动态计算高度(new)
        func getLabelHeight(_ label: UILabel,  CGFloat) -> CGFloat {
            return label.sizeThatFits(CGSize(width, height: CGFloat(MAXFLOAT))).height
        }
        
        //根据高度动态计算宽度(old)
        func getLabelWidth(_ text: NSAttributedString, height: CGFloat) -> CGFloat {
            let contentWidth = text.boundingRect(with: CGSize( CGFloat(MAXFLOAT), height: height), options: [.usesLineFragmentOrigin], context: nil).width
            return contentWidth
        }
        
        //根据高度动态计算宽度(new)
        func getLabelWidth(_ label: UILabel, height: CGFloat) -> CGFloat {
            return label.sizeThatFits(CGSize(CGFloat(MAXFLOAT), height: height)).width
        }
    }

     使用:

    let tiplblHeight = self.tipLabel.getLabelHeight(self.tipLabel,  128.5.auto())
  • 相关阅读:
    nginx负载均衡
    saltstack高效运维
    nginx入门与实战
    web service基础知识
    centos tomcat解压版安装
    centos yum 安装jdk1.7
    centos7安装opencv3.4.1(同样适用于最新版本4.2.0)
    正向代理与反向代理,正向代理与反向代理的应用
    MySQL日期 字符串 时间戳互转
    idea svn提交时,performing vcs refresh时间很长的解决办法
  • 原文地址:https://www.cnblogs.com/akiha/p/14824293.html
Copyright © 2011-2022 走看看