使用 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 中动态文本视图的高度的主要内容,如果未能解决你的问题,请参考以下文章