Swift,使用UIImageView定制UITableViewCell。需要将单元格调整为图像高度

时间:2015-08-04 09:19:00

标签: ios swift uitableview uiimageview uikit

我正在尝试创建应用,它将在表格视图中显示图像。 我有图像视图的自定义单元格。它只需从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中设置了自动维度:

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.estimatedRowHeight = tableView.rowHeight
        tableView.rowHeight = UITableViewAutomaticDimension
    }

我为图像设置了“方面适合度”,我得到了奇怪的结果。图像超出了细胞的边界。也许我需要设置一些限制......我不知道。

结果:

result of it

但我需要这个:

nice result

3 个答案:

答案 0 :(得分:7)

如果要加载图像异步:

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

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

在你的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

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

答案 1 :(得分:1)

如果您想将dinamic表与UITableViewAutomaticDimension一起使用,则需要正确设置约束(image)。 (正确的宽度和高度,我建议你使用宽高比)

使用静态表视图,您应该实现optional func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat,并手动计算单元格大小。

答案 2 :(得分:1)

当然,您需要在单元格中为图像设置约束

screenshot

也许这个截图会帮助你