ios – UICollectionView将图像添加到单元格

ios – UICollectionView将图像添加到单元格,第1张

概述我正在开发一个项目,该项目使用UICollectionView来显示可能有也可能没有图像的数据. 我正在使用的方法是检查图像URL是否为空,然后将ImageView添加单元格上. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPa 我正在开发一个项目,该项目使用UICollectionVIEw来显示可能有也可能没有图像的数据.

我正在使用的方法是检查图像URL是否为空,然后将ImageVIEw添加到单元格上.

- (UICollectionVIEwCell *)collectionVIEw:(UICollectionVIEw *)collectionVIEw cellForItemAtIndexPath:(NSIndexPath *)indexPath{    if (question.picture != (ID)[NSNull null]) {        //add AsyncImageVIEw to cell        imageVIEw.contentMode = UIVIEwContentModeScaleAspectFill;        imageVIEw.clipsToBounds = YES;        imageVIEw.tag = IMAGE_VIEW_TAG;        [cell addSubvIEw:imageVIEw];        [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageVIEw];        imageVIEw.imageURL = [NSURL URLWithString:question.picture];    }}

对于那些没有图像的单元格,单元格应如下所示:
https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/good.png

但是,其中一些仍然会在其上添加带有裁剪图像的ImageVIEw,导致如下所示:
https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/bad.png

我尝试过使用SDWebImage,但仍未解决问题.

另一个问题是,当我向下滚动UICollectionVIEw时,我会看到一些图像首先显示为上面显示的图像,然后在加载完成后更改为正确的图像,我只是不知道导致问题的原因.

请帮我解决这两个问题,我真的很感激你的帮助.

解决方法 首先,在单元格中添加图像的方式非常危险.原因是您的单元格正在被重用(例如滚动时或重新加载数据时),这些图像在重用时永远不会被删除.因此,您将开始在任何地方进行搜索,甚至可以达到您的单元格包含多次图像的位置.这有两种方法:

>第一种方式(好方法):您将UICollectionVIEwCell子类化,并为子类提供“imageVIEw”属性.然后在CustomCollectionVIEwCell.m文件中执行此 *** 作:

// Lazy loading of the imageVIEw- (UIImageVIEw *) imageVIEw{    if (!_imageVIEw) {        _imageVIEw = [[UIImageVIEw alloc] initWithFrame:self.contentVIEw.bounds];        [self.contentVIEw addSubvIEw:_imageVIEw];     }     return _imageVIEw; }// Here we remove all the custom stuff that we added to our subclassed cell-(voID)prepareForReuse{    [super prepareForReuse];    [self.imageVIEw removeFromSupervIEw];    self.imageVIEw = nil;}

然后在你的VIEwController中你必须像这样声明你的collectionVIEwCells的新类:

[self.collectionVIEw registerClass:[CustomCollectionVIEwCell class] forCellWithReuseIDentifIEr:@"cell"];

它将确保在重用时正确删除图像,并且更容易在collectionVIEw委托中设置单元格.
>第二种方式(脏方式),每次加载新单元格时都会删除视图:

- (UICollectionVIEwCell *)collectionVIEw:(UICollectionVIEw *)collectionVIEw                 cellForItemAtIndexPath:(NSIndexPath *)indexPath{    for (UIVIEw *subvIEw in [cell.contentVIEw subvIEws]) {        [subvIEw removeFromSupervIEw];    }    if (question.picture != (ID)[NSNull null]) {        //add AsyncImageVIEw to cell        imageVIEw.contentMode = UIVIEwContentModeScaleAspectFill;        imageVIEw.clipsToBounds = YES;        imageVIEw.tag = IMAGE_VIEW_TAG;        [cell.contentVIEw addSubvIEw:imageVIEw];        [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageVIEw];        imageVIEw.imageURL = [NSURL URLWithString:question.picture];    }}

这种方式要容易得多,但我不推荐它:P

现在尝试一下,让我知道你的BUG是如何演变的.

总结

以上是内存溢出为你收集整理的ios – UICollectionView将图像添加到单元格全部内容,希望文章能够帮你解决ios – UICollectionView将图像添加到单元格所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1108122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存