iOS第一个UICollectionViewCell图像仅在使用约束后才加载

Posted

技术标签:

【中文标题】iOS第一个UICollectionViewCell图像仅在使用约束后才加载【英文标题】:iOS first UICollectionViewCell image not loading ONLY after using constraints 【发布时间】:2015-10-23 03:14:03 【问题描述】:

没有任何限制,我的 UICollectionViewCells 立即加载,完全没有任何问题。当我在情节提要中放置约束以使图像视图水平且垂直居中于单元格时,第一个图像单元格不会加载。我必须滚动几次,然后回到开头才能显示第一个图像单元格。解除约束,它会恢复正常工作。

我认为图像可能没有及时加载,但情况似乎并非如此。

我错过了什么?

我可以输入一些代码,但它是一个非常标准的 UICollectionView,在 ViewController 中有自定义单元格。

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 


    CollectionViewCell *cell = (CollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    NSString *imageName = [NSString stringWithFormat:@"%@", [self.urlArray objectAtIndex:indexPath.row]];
    [cell setImageName:imageName];

    [cell updateCell]; 
    return cell;





    -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
        return self.collectionView.frame.size;
    

编辑: 我刚刚删除了导航栏,前 2 张图片正在导航栏后面加载。它们以默认原型 CollectionViewCell 的大小加载。一旦我滚动并返回它,它就是预期的大小。

【问题讨论】:

【参考方案1】:

当您不添加约束时,IB 会自动为您添加约束,根据情节提要中的框架为您提供绝对位置和大小。您添加的约束可能没有按照您的想法进行。

【讨论】:

我认为可能是这种情况,但这是一个水平集合视图,一次分页一个单元格。随后的每个单元格都在按照我的预期执行,当我返回第一个单元格时,它正是我预期的位置,整个集合现在完全按照应有的方式执行。 此外,虽然单元格上的 UIImage 没有加载,但单元格本身正在加载(我将其设置为另一种颜色进行检查),它正是它应该在的位置。似乎约束扰乱了图像最初的加载方式。 是的,这就是我所说的约束并不是你认为的那样的意思。如果您只限制位置而不限制大小,这可能是您的问题,具体取决于您的想象和设置时间。 对,但是为什么这会导致第一张,有时是第二张图片最初无法加载(或您建议可能在屏幕外),但以下图片加载正常,然后当我滑回第一个图像他们应该在哪里。约束不是一致的吗? 好的,所以我刚刚删除了导航栏,前 2 张图片加载在导航栏后面。它们以默认原型 CollectionViewCell 的大小加载。一旦我滚动并返回它,它就是正确的大小。【参考方案2】:

添加 [cell layoutIfNeeded];就在 cellforitematindexpath 中的返回单元格修复它之前

【讨论】:

以上是关于iOS第一个UICollectionViewCell图像仅在使用约束后才加载的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView

ios开发之-- tableview/collectionview获取当前点击的cell

如何以编程方式创建 UICollectionViewCell

如何从 UICollectionViewCell 访问 UICollectionView 中 Cell 的 indexPath

Xcode 6 beta 4,UIButton 在collectionviewcell 中不负责

ios学习总结 -- 创建第一个ios项目