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())
  • 相关阅读:
    对于动态建立索引的禁止方法
    在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
    Lotus Domino中使用Xpage技术打造通讯录
    利用 LotusScript 实现 Microsoft Word 文档在公文流转中的公文留痕
    Ext.Template模板进阶
    Ext.template的使用
    Domino中Xpage和自定义控件的使用
    利用 LotusScript 灵活操作 Lotus Notes 富文本域
    ExtJs2.0学习系列(11)Ext.XTemplate
    利用 XForms 和 ODF 实现交互式办公文档
  • 原文地址:https://www.cnblogs.com/akiha/p/14824293.html
Copyright © 2011-2022 走看看