带有 UIImageView 的 Swift 自定义 UITableViewCell.需要将单元格大小调整为图像高度 [英] Swift, custom UITableViewCell with UIImageView. Need to resize cell to image height

查看:17
本文介绍了带有 UIImageView 的 Swift 自定义 UITableViewCell.需要将单元格大小调整为图像高度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作应用程序,它将在表格视图中显示图像.我有带有图像视图的自定义单元格.它只需要从 url 下载图片数据:

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)
        }
    }
}

我需要在下载后更改单元格高度.它必须等于图像的高度.我在 viewController 中设置了自动尺寸:

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
    }

我将aspect fit"设置为图像,我得到了奇怪的结果.图像超出了单元格的边界.也许我需要设置一些约束……我不知道.

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.

结果:

但我需要这个:

推荐答案

如果要异步加载图片:

加载并设置新的 UIImage 后,您可以通过 UITableView 函数重新加载特定的单元格:

After you load and set new UIImage, you can reload specific cell via UITableView function:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

在你的 UIViewController 中:

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)
    }
}

在你的 UITableViewCell 中

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)
        }
    }
}

这篇关于带有 UIImageView 的 Swift 自定义 UITableViewCell.需要将单元格大小调整为图像高度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆