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

Posted

技术标签:

【中文标题】使用 swift 在不使用自动尺寸的情况下获取 tableView 中动态文本视图的高度【英文标题】:get height of dynamic textViews in tableView without using automatic dimensions using swift 【发布时间】:2018-05-07 05:40:54 【问题描述】:

我想动态计算我的textView 在 tableView 中的高度以在heightForRowAt 中使用。我想使用自动尺寸,因为它经常会打乱我在 containerViews 中的滚动。

目前我正在为每个单元格实例化一个textView,添加文本并使用以下方法获取高度:

var textViewForCellHeight = UITextView()
textViewForCellHeight.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)

textViewForCellHeight.frame = CGRect(x: 0, y: 0, width: self.tableView.frame.size.width - cellHorizontalPadding - tableView.safeAreaInsets.left - tableView.safeAreaInsets.right, height: 0)
textViewForCellHeight.text = myString
textViewForCellHeight.sizeToFit()
return textViewForCellHeight.frame.size.height

heightForRowAt 中使用它可以正常工作并为单元格提供正确的高度,但它很昂贵并且大大减慢了tableView。有没有更有效的方法可以使用textView 动态获取 tableView 单元格的高度?

【问题讨论】:

【参考方案1】:

您可以简单地在这个函数中传递您的字符串,您将根据您的字符串获得动态高度。

 func calculateHeight(inString:String) -> CGFloat

    let messageString = input.text
    let attributes : [NSAttributedStringKey : Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue) : UIFont.systemFont(ofSize: 15.0)]

    let attributedString : NSAttributedString = NSAttributedString(string: messageString!, attributes: attributes)

    let rect : CGRect = attributedString.boundingRect(with: CGSize(width: 222.0, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

    let requredSize:CGRect = rect
    return requiredSize.height

【讨论】:

【参考方案2】:

试试这个代码:

 func cellHeight(withTxt string: String) -> Float 
        let textRect: CGRect = string.boundingRect(with: CGSize(width: self.view.frame.width/* Preferred textView Width */, height: CGFloat(MAXFLOAT)), options: ([.usesLineFragmentOrigin, .usesFontLeading]), attributes: [.font: UIFont(name: "Helvetica Neue", size: 17)!], context: nil)
        let requiredSize: CGSize = textRect.size
        //finally u return your height
        return Float(requiredSize.height)
 

【讨论】:

以上是关于使用 swift 在不使用自动尺寸的情况下获取 tableView 中动态文本视图的高度的主要内容,如果未能解决你的问题,请参考以下文章

在不使用自动布局的情况下调整 iPhone 5 屏幕尺寸

如何在不使用自动布局的情况下以 XIB/故事板大小查看手机尺寸

在不读取整个文件的情况下获取图像尺寸

在不读取整个文件的情况下获取图像尺寸

如何在不下载 Java 的情况下获取网站图像的尺寸?

添加价格和库存后如何在不复制产品的情况下获取数据