以编程方式将子视图添加到 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
后取一个标志并设置它。您可以将imageview
和flag
声明为全局变量。类似的,
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 不起作用