我有一个带有图像视图和标签的tableview单元格。 图像从URL下载。它们可以是风景或肖像,以后将决定它们的高度约束。 标签可以是多行,其lines属性设置为0,并且在属性检查器中将imageview设置为Aspect fill。
我想垂直调整单元格大小以适合图像和标签。
在cellForRow中,如果我将imageview的高度约束设置为小于100的值,那么图像视图将覆盖标签。如果我将其设置为300,那么它会部分覆盖标签。如果我将它设置为高达10000的高度,它会拉伸图像,但标签根本不会被覆盖。
以下是代码:
class ArtistListViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 250
}
}
extension ArtistListViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ArtistTableViewCell
cell.imageHeightConstraint.constant = 100
let artist = artists[indexPath.row]
cell.descriptionLabel.text = artist.description
setupCellForImage(cell, artist: artist)
return cell
}
fileprivate func setupCellForImage(_ cell: ArtistTableViewCell, artist: Artist) {
let url = URL(string: artist.image)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
DispatchQueue.main.async(execute: {
cell.artistImageView.image = UIImage(data: data!)
})
}).resume()
}
}
ImageView约束:
Top space to superview = 0
Bottom space to description label = 20
Height = 235
标签限制:
Bottom space to superview = 8
我没有改变内容拥抱或抗压缩的优先级。
以下是2个图像,其中高度约束设置为300.图像正在加载并且一旦完成加载:
这里发生了什么?为什么单元格没有根据图像视图的高度调整大小?