I'am trying to make app, that will show images in table view. I have custom cell with image view. It only must download image data from url:
@IBOutlet weak var tweetImage: UIImageView!
var imageData : MediaItem? { didSet { updateUI() }}
func updateUI(){
tweetImage.image = nil
if let url = imageData?.url {
if let data = NSData(contentsOfURL: url) {
tweetImage.image = UIImage(data: data)
}
}
}
I need to get the cell height was changed after the download. It must be equal to the height of the image. I set auto dimension in viewController:
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = tableView.rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
}
I set "aspect fit" to image, I get strange results. The image extends beyond the boundaries of the cell. Maybe i need to set some constraints... I don't know.
Results:
But i need this:
If you want to load images async:
After you load and set new UIImage
, you can reload specific cell via UITableView
function:
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
In your UIViewController:
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = tableView.rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
NSNotificationCenter.defaultCenter().addObserver(self, selector: "imageDidLoadNotification:", name:"CellDidLoadImageDidLoadNotification", object: nil)
}
func imageDidLoadNotification(notification: NSNotification) {
if let cell = notification.object as? UITableViewCell
let indexPath = tableView.indexPathForCell(cell) {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
}
In your UITableViewCell
func updateUI(){
tweetImage.image = nil
if let url = imageData?.url {
if let data = NSData(contentsOfURL: url) {
tweetImage.image = UIImage(data: data)
NSNotificationCenter.defaultCenter().postNotificationName("CellDidLoadImageDidLoadNotification", object: self)
}
}
}
If you want to use dinamic table with UITableViewAutomaticDimension
, then you need to set your constraint properly (image). (for correct width and height, I suggest you to use aspect ratio)
With static table view, you should implement optional func tableView(_ tableView: UITableView,
heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
, and count the cell size manually.
Of course, you need to set constraints for your image in the cell
Maybe this screenshot will help you
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With