Bill Mayes
Bill Mayes

Reputation: 15

swift tableview image and label

I can't seem to figure how to have a tableview that contains a subject, body and image so that if there is not an image to have the subject and body together. see imageauto lay with table prototype

I would like the subject and body together when there is an image in the database and then if there is an image, then subject image body

Upvotes: 1

Views: 1368

Answers (2)

Guillermo Alvarez
Guillermo Alvarez

Reputation: 1775

You can do this in your dataSource methods for the tableview. Something like this should work:

//Model:
var model = [Stuff]


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "myprototype", for: indexPath)

    cell.subjectLabel.text = model[indexPath.row].subject
    cell.bodyLabel.text = model[indexPath.row].body
    //assuming the image is an optional
    if let image = model[indexPath.row].image {
        cell.imageView.image = image
    }
    return cell
}

You might have to set the autolayout constraints for the imageView to have a low compression resistance.

You might also want to make the cells resize by implementing the following in the UITableViewDelegate methods:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

Upvotes: 0

Josh Homann
Josh Homann

Reputation: 16327

pin the labels to the top and bottom of the cell. When you don't have an image you set the imageView.isHidden = true. You also return the regular cell height minus the imageView.frame.size.height in UITableViewDelegate.tableview(_:heightForRowAt:).

If you don't like approach just make two different tableViewCells and deque the one with the image when you have an image and the one without the imageView when you don't have an image.

Upvotes: 1

Related Questions