在Swift 2中使用异步图像的动态单元格高度

时间:2015-12-03 17:13:55

标签: swift uitableview haneke

我正在尝试构建类似Facebook的Feed。我使用标准的Tableview,在故事板中设置了自动布局约束。

宽度应为视口的100%,高度应根据图像的宽高比。

我正在使用Haneke的hnk_setImageFromURL从服务器加载异步图像。

我看到Moment.js选项可以使用tableview.beginUpdates()endUpdates(),这会导致第一个渲染工作正常,但是一旦我开始滚动高度计算出错,单元格就显示为空白/或应用程序因indexOutOfBounds而崩溃。

从服务器手动计算heightForRowAtIndexPath中具有预先给定宽高比的高度是唯一的选择吗?

我相关的代码部分

ViewController:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 500
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

      let cell = tableView.dequeueReusableCellWithIdentifier("FeedItem", forIndexPath: indexPath) as! FeedItemTableViewCell

      content.hnk_setImageFromURL(NSURL(string: contentImage)!, placeholder: nil, format: nil, failure: nil, success: {image in

                    cell.content.image = image  
                    self.beginUpdates()
                    self.endUpdates()

                }
        )
}

P.S。使用Haneke造成的副作用是我必须为UIImageView提供一些初始大小,目前我使用占位符图像,当从服务器加载图像时会导致恼人的动画

1 个答案:

答案 0 :(得分:0)

Here我没有在cellForRowAtIndex方法中加载单元格数据,而是创建了TableViewCell的子类。而且我使用的是SDWebImage而不是Haneke。

希望这有帮助