HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 根据UICollectionView中的图像动态更改单元格大小大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在水平集合视图中显示从服务器收到的动态图像.当我设置集合视图时,我设置了这个:
-(void)setupCollectionView{
[self setupPageControlView];
self.screensCollectionView.delegate=self;
self.screensCollectionView.datasource=self;
[self.screensCollectionView registerNib:[UINib nibWithNibName:@"FGAppScreensCollectionViewItemCell" bundle:nil] forCellWithReusEIDentifier:@"screenCell"];


UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[flowLayout setMinimumInteritemSpacing:0.0f];
[flowLayout setMinimumLinespacing:0.0f];
[flowLayout setItemSize:CGSizeMake(165,255)];
//[self.screensCollectionView setPagingEnabled:YES];
[self.screensCollectionView setCollectionViewLayout:flowLayout];

}

对于cellForRowATindexPath我下载这样的图像:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemATindexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"screenCell";

FGAppScreensCollectionViewItemCell *cell = [collectionView dequeueReusableCellWithReusEIDentifier:cellIdentifier forIndexPath:indexPath];

NSURLrequest *urlrequest = [NSURLrequest requestWithURL:[NSURL URLWithString:[self.imageURLArray objectATindex:indexPath.row]]];

UIActivityInDicatorView *spinner = [[UIActivityInDicatorView alloc] initWithActivityInDicatorStyle:UIActivityInDicatorViewStyleGray];
[spinner startAnimaTing];
[spinner setFrame:CGRectMake(50,100,20,20)];
[cell.contentView addSubview:spinner];
[cell.screenImageView setImageWithURLrequest:urlrequest placeholderImage:nil success:^(NSURLrequest *request,NShttpURLResponse *response,UIImage *imagE) {
    //STOP THE SPINNER
    for (UIView* view in [cell.contentView subviews]) {
        if ([view isKindOfClass:[UIActivityInDicatorView class]]) {
            [view removeFromSuperview];
        }
    }
    cell.screenImageView.image = image;

} failure:^(NSURLrequest *request,NSError *error) {
    //
}];
[cell.screenImageView setImageWithURL:[NSURL URLWithString:[self.imageURLArray objectATindex:indexPath.row]]];
if (self.delegatE) {
      UITapGestureRecognizer* g = [[UITapGestureRecognizer alloc] initWithTarget:self.delegate action:@SELEctor(showPopUpImageView:)];
      [cell.screenImageView addGestureRecognizer:g];
}

return cell;

}

但是,集合视图中显示纵向和横向图像.肖像图像显示得很好,但在集合视图中景观图像看起来很小.我需要做的是根据图像大小调整单元格大小,以便填充正确的宽高比?

添加了如下所示的方法,但问题是它在开始时一次调用所有单元格,并且一旦我在cellForRowATindexPath方法中下载图像就不会被调用

- (CGSizE)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemATindexPath:(NSIndexPath *)indexPath

{

return CGSizeMake(165,255);

}

因此,我想知道如何实现功能,如果需要更多信息,请告诉我们?

解决方法

在-setImageWithURLrequest:…中,当图像加载将其缓存在哈希表中,然后使用当前图像路径调用-reloadItemsATindexPaths:重新加载单元格,从而使CollectionView重新检查单元格的大小应该是多少.

确保在查找图像时查阅哈希表.如果collectionView项目在屏幕外滚动并重新打开,这还可以节省额外的网络访问.

注意我担心如果您使用UICollectionReusableView子类,您的代码可能会失败,因为单元格可以在其图像加载之前重新使用,因此图像将加载到错误的位置.

大佬总结

以上是大佬教程为你收集整理的ios – 根据UICollectionView中的图像动态更改单元格大小全部内容,希望文章能够帮你解决ios – 根据UICollectionView中的图像动态更改单元格大小所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。