Swift 字符串动态计算高度

Posted 仲长可倾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(width: 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, width: CGFloat) -> CGFloat {
        let contentHeight = text.boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: [.usesLineFragmentOrigin], context: nil).height
        return contentHeight
    }
    
    // 根据宽度动态计算高度(new)
    func getLabelHeight(_ label: UILabel, width: CGFloat) -> CGFloat {
        return label.sizeThatFits(CGSize(width:width, height: CGFloat(MAXFLOAT))).height
    }
    
    //根据高度动态计算宽度(old)
    func getLabelWidth(_ text: NSAttributedString, height: CGFloat) -> CGFloat {
        let contentWidth = text.boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: height), options: [.usesLineFragmentOrigin], context: nil).width
        return contentWidth
    }
    
    //根据高度动态计算宽度(new)
    func getLabelWidth(_ label: UILabel, height: CGFloat) -> CGFloat {
        return label.sizeThatFits(CGSize(width:CGFloat(MAXFLOAT), height: height)).width
    }
}

 使用:

let tiplblHeight = self.tipLabel.getLabelHeight(self.tipLabel, width: 128.5.auto())

 

以上是关于Swift 字符串动态计算高度的主要内容,如果未能解决你的问题,请参考以下文章

swift常用代码片段

Swift如何获得UIScrollView动态高度

Swift / 如何使用具有动态高度的 UITextView INSIDE UITableViewCell 与动态高度

微信小程序:swiper高度动态适配

动态改变 UITableViewCell 高度 - Swift 4

使用 swift 在不使用自动尺寸的情况下获取 tableView 中动态文本视图的高度