使用Swift创建TableView单元格文本视图的动态高度可以通过以下步骤实现:
tableView(_:cellForRowAt:)
中,创建一个UITableViewCell实例,并设置其内容。tableView(_:heightForRowAt:)
中,计算文本内容的高度,并返回该高度。下面是一个示例代码:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
// 数据源
let data = ["这是一段文本内容", "这是另一段文本内容", "这是第三段文本内容"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
// MARK: - UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = data[indexPath.row]
cell.textLabel?.numberOfLines = 0 // 设置为0表示自动换行
return cell
}
// MARK: - UITableViewDelegate
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let text = data[indexPath.row]
let font = UIFont.systemFont(ofSize: 17) // 设置字体大小
let textHeight = text.height(withConstrainedWidth: tableView.frame.width, font: font)
return textHeight + 20 // 添加一些额外的高度,以便显示完整的文本内容
}
}
// 计算文本高度的扩展方法
extension String {
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)
return ceil(boundingBox.height)
}
}
在上述代码中,我们首先设置TableView的代理和数据源为当前的ViewController。然后,在tableView(_:cellForRowAt:)
方法中,我们创建了一个UITableViewCell实例,并设置其内容为数据源中的文本内容。在tableView(_:heightForRowAt:)
方法中,我们计算了文本内容的高度,并返回该高度。为了计算文本高度,我们使用了一个String的扩展方法height(withConstrainedWidth:font:)
,该方法使用boundingRect方法计算文本的高度。
这样,TableView的单元格文本视图就可以根据文本内容的长度自动调整高度了。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云