使用下载的图像和多行标签自动调整tableview单元格

时间:2017-03-16 10:32:52

标签: xcode swift3 autolayout interface-builder

我有一个带有图像视图和标签的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.图像正在加载并且一旦完成加载: enter image description here enter image description here

这里发生了什么?为什么单元格没有根据图像视图的高度调整大小?

1 个答案:

答案 0 :(得分:2)

在ImageView,属性检查器中,您需要选择Clip To Bounds。然后它将解决您问题的一部分。然后你需要正确设置约束。