在表视图中调整行大小的最佳方法是什么?

在表格视图中尽可能平滑地调整行大小的最佳方法是什么,以便单元格中包含的图像在占据整个单元格时保留其纵横比? 注意:这些图像是在cellForRowAt方法中下载的,因此在应用程序运行时期之前,它们的大小才会知道。

更新:这是配置TableViewCell的代码

 import UIKit class TableViewCell: UITableViewCell { @IBOutlet weak var cellImageView: UIImageView! var aspectConstraint: NSLayoutConstraint? override func prepareForReuse() { super.prepareForReuse() aspectConstraint = nil } func setCellImage(image:UIImage){ let aspect = image.size.width / image.size.height aspectConstraint = cellImageView.heightAnchor.constraint(equalTo: cellImageView.widthAnchor, multiplier: aspect) cellImageView.image = image } } 

这是tableViewController的代码

 import UIKit import Firebase import FirebaseStorageUI class TableViewController: UITableViewController { var imageURLS:[String] = [String]() var listener:ListenerRegistration? override func viewDidLoad() { super.viewDidLoad() listener = Firestore.firestore().collection("Posts").addSnapshotListener{ querySnapshot, error in guard let snapshot = querySnapshot else { print("Error fetching snapshots: \(error!)") return } snapshot.documentChanges.forEach { diff in if (diff.type == .added) { print("New data: \(diff.document.data())") } if (diff.type == .modified) { print("Modified data: \(diff.document.data())") } if (diff.type == .removed) { print("Removed data: \(diff.document.data())") } guard let newImageURL = diff.document.data()["imageDownloadURL"] as? String else{ print("Failed to get image download URL") return } print("downloadURL: \(newImageURL)") self.imageURLS.insert(newImageURL, at: 0) let indexPath = IndexPath(row: 0, section: 0) self.tableView.insertRows(at: [indexPath], with: .top) } } tableView.estimatedRowHeight = 100.0 tableView.rowHeight = UITableViewAutomaticDimension } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return imageURLS.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Reuse", for: indexPath) as! TableViewCell let downloadURL = URL(string: self.imageURLS[indexPath.row]) if cell.cellImageView.image == nil{ URLSession.shared.dataTask(with: downloadURL!) { (data, _, _) in if let data = data { let image = UIImage(data: data) DispatchQueue.main.async { cell.setCellImage(image:image!) tableView.reloadRows(at: [indexPath], with: .top) } } }.resume() } return cell } } 

您应该按照以下步骤操作:

  1. 为tableview设置UITableViewAutomaticDimension
  2. 将图像视图的自动布局约束设置为单元格的顶部和底部,以便单元格自动将其高度调整为图像视图的高度。

  3. 由于您下载了图像,因此您应该在完成图像下载时重新加载重新加载单元(如果您可以共享用于下载图像的代码,我将能够解释更多内容)。