以编程方式将子视图添加到 UICollectionView

Posted

技术标签:

【中文标题】以编程方式将子视图添加到 UICollectionView【英文标题】:Adding subview into UICollectionView programmatically 【发布时间】:2017-06-15 04:35:57 【问题描述】:

关注answer 这样我就能够以编程方式创建UICollectionView。但是当我尝试将子视图添加到UICollectionViewCell 时,我找不到任何更好的解决方案。这是关于 SO 的大多数答案是如何实现的

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

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor redColor];
    UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    image.image = /*some image*/
    [cell addSubview:image];
    return cell;

也许我错了,但使用UICollectionView 的目的不是因为回收和重用以优化性能吗?如果在用户滚动时使用上面的代码,当dequeueReusableCellWithReuseIdentifier 触发时,它不会将越来越多的UIImageView 添加到UICollectionViewCell 子视图中吗?

那么更好的方法是什么?我不能为此使用UITableView,因为我需要水平滚动技术。

注意:我需要在不使用 xib 的情况下以编程方式创建它。

【问题讨论】:

【参考方案1】:

是的,每当您的收藏视图滚动时,它都会添加imageView!这不是一个好方法。现在,您可以做的是,在您的collectionview cell 中获取一个图像视图,我的意思是在界面构建器(xib 或情节提要,无论您使用过什么)和cellForItemAtIndexPath 只是show or hide 根据需要或更改图像的图像视图根据要求!

更新:

如果您以编程方式创建集合视图,那么您可以在 cellForItemAtIndexPath! 中设置一些标志!在添加imageview 后取一个标志并设置它。您可以将imageviewflag 声明为全局变量。类似的,

   if (!isImageAdded) 

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor redColor];
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    imageView.image = /*some image*/
    [cell addSubview:image];
    isImageAdded = YES;

else

    imageView.image = /*some image*/

【讨论】:

谢谢回复。我了解如何使用 XIB 创建它,但我需要的是在不使用 XIB 或情节提要的情况下以编程方式创建它。有可能吗? 谢谢我所需要的

以上是关于以编程方式将子视图添加到 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用自动布局将子视图添加到 UICollectionView 不起作用

检查视图元素是不是以编程方式添加到布局中

将子视图添加到静态 UITableViewCell 不起作用

使用实例方法以编程方式添加子视图

旋转设备时以编程方式将视图添加到父 LinearLayout 会重复最后一个条目

使用子视图重用单元格(以编程方式)