首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableViewAutomaticDimension + AFNetworking

UITableViewAutomaticDimension + AFNetworking
EN

Stack Overflow用户
提问于 2015-06-09 15:23:58
回答 1查看 245关注 0票数 0

我从API中加载图像,它们有不同的高度,并在包含其他类型单元格的UITableView中显示(我使用UITableViewAutomaticDimension的原因)

我想用图像高度显示(或重新加载)包含图像的单元格,以避免失真。

我尝试过不同的解决方案,但我很难让它发挥作用?对于我如何解决这个问题有什么建议或建议吗?

谢谢

编辑:

我在这里上传了一个示例项目,https://github.com/LucasCoelho/ImageLoading

崩溃错误是

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 9 beyond bounds [0 .. 8]'

我想这可能和那些相互冲突的NSAutolayoutConstraints有关

代码语言:javascript
复制
(
    "<NSLayoutConstraint:0x7f85db176750 V:[UIImageView:0x7f85db17a090(72)]>",
    "<NSLayoutConstraint:0x7f85db18ca90 V:|-(0)-[UIImageView:0x7f85db17a090]   (Names: '|':UITableViewCellContentView:0x7f85db179f70 )>",
    "<NSLayoutConstraint:0x7f85db18cb80 V:[UIImageView:0x7f85db17a090]-(0)-|   (Names: '|':UITableViewCellContentView:0x7f85db179f70 )>",
    "<NSLayoutConstraint:0x7f85db197e50 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f85db179f70(128)]>"
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-09 16:42:10

首先,需要向imageView添加高度约束,并从UITableViewCell子类中创建对它的引用。

代码语言:javascript
复制
class TableViewCell: UITableViewCell {
      @IBOutlet weak var imageView: UIImageView!
      @IBOutlet weak var imageViewHeightConst: NSLayoutConstraint!
}

然后使用UIImageView+AFNetworking.h方法:

代码语言:javascript
复制
- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest
          placeholderImage:(UIImage *)placeholderImage
                   success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
                   failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure;

在成功块中,您需要将下载的图像设置为您的imageViewHeightConst,并更新imageView常量属性。

代码语言:javascript
复制
imageView.image = image
imageViewHeightConst.constant = image.size.height

此外,您还需要一种方法来通知您的表视图,图像已经下载,并且应该更新tableview。因此,您可以使用委托模式来解决这个问题。在委托方法的实现中,可以使用以下代码更新表视图:

代码语言:javascript
复制
 tableView.beginUpdates()
 tableView.endUpdates() 

最终,您的单元格子类将类似于以下内容:

代码语言:javascript
复制
@objc protocol TableViewCellDelegate {
    func tableViewCell(cell: UITableViewCell, didLoadImage: UIImage)
}

class TableViewCell: UITableViewCell {
    @IBOutlet weak var photoImageView: UIImageView!
    @IBOutlet weak var imageViewHeightConst: NSLayoutConstraint!

    weak var delegate: TableViewCellDelegate?
}

extension TableViewCell {

    func configureCellForURL(url: NSURL, placeholderImage: UIImage) {
        let request = NSURLRequest(URL: url)
        photoImageView.setImageWithURLRequest(request, placeholderImage: placeholderImage, success: { [weak self] (request, response, image) -> Void in

            self?.photoImageView?.image = image
            self?.imageViewHeightConst?.constant = image.size.height
            self?.delegate?.tableViewCell(self!, didLoadImage: image)

        }) { (request, response, error) -> Void in

        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30736352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档