UICollectionView重用时的视图重叠

原创 2016年06月02日 10:48:23

      在使用UICollectionView的时候会出现在cell上添加视图后重用时视图重叠了,如果只是添加了一张图片在上面可能你不能发现,但添加了UILabel时你就能看到如下的效果,因为在初始化cell时不像UITableView一样调用init的一些方法,所以CollectionView是在init方法是就已经把视图初始化出来了,所以再添加就会重叠,一下2种方法以供使用。


         



方法一:移除contentView上的视图再添加视图

<span style="color:#333333;"><span style="font-size: 14px;">- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    
    UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@“videoCell” forIndexPath:indexPath];
    //移除contentView上的视图,不然会重叠
</span><span style="font-size:18px;"><strong>    for (UIView *view in [cell.contentView subviews])
    {
        [view removeFromSuperview];
    }</strong></span><span style="font-size: 14px;"><strong>
// <<<<</strong><<< cell上的视图配置
    UIImageView * videoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 2 * (cell.frame.size.height/3))];
    videoImageView.image = [UIImage imageNamed:@"6.png"];
    UILabel * titlePreLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(videoImageView.frame) + 5, 40, 20)];
    titlePreLabel.text = @"标题";
    titlePreLabel.font = [UIFont systemFontOfSize:12];
    UILabel * titleNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(titlePreLabel.frame), CGRectGetMinY(titlePreLabel.frame), 130, 20)];
    titleNameLabel.text = @"世界高尔夫比赛决赛视频";
    titleNameLabel.font = [UIFont systemFontOfSize:10];
    UILabel * publishTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(titlePreLabel.frame) + 5, cell.frame.size.width, 25)];
    publishTimeLabel.text = @"2016-02-14";
    publishTimeLabel.textAlignment = NSTextAlignmentCenter;
    publishTimeLabel.font = [UIFont systemFontOfSize:12];
    
    [cell.contentView addSubview:videoImageView];
    [cell.contentView addSubview:titlePreLabel];
    [cell.contentView addSubview:titleNameLabel];
    [cell.contentView addSubview:publishTimeLabel];
    
    cell.backgroundColor = [UIColor whiteColor];
    
    return cell;
}</span></span>


方法二:新建UICollectionViewCell的类,在类中重写init方法初始化想要的视图

1: 首先创建一个类,集成 UICollectionViewCell,将你这个UIImageView加到这个类的init方法里面去
2: 在viewDidLoad的时候,注册重用     [self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"CELL"];
3: 使用 MyCommentsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CELL" forIndexPath:indexPath];



UICollectionViewCell重用注意要点(解决视图重叠问题)

刚接触√,总会遇到很多莫名其妙的困难, 最容易造成bug的是,我总以为UICollectionView和UITableView是差不多的,就先入为主基本就照抄uitableview的东西去做,以为只是...
  • damon2989
  • damon2989
  • 2015年03月27日 10:53
  • 15366

纯代码写CollectionViewCell的复用问题

需求:      需要的Button 的个数不一定 Button上显示的字符串的长度不一定,Button上显示的字符串和Button的个数全部从服务器下发 ,当Button的个数在屏幕上展示不下...
  • GodBlessMyParents
  • GodBlessMyParents
  • 2016年02月16日 15:55
  • 6414

UICollectionView重用机制的问题

肯定会有很多人遇到下面这样的问题。。。 其实我们只需要在 UICollectionViewCell *cell = [collectionView dequeueReusableCellWith...
  • u010710758
  • u010710758
  • 2015年05月25日 21:25
  • 3509

iOS 关于UICollectionView的cell重用问题

UICollectionView重用机制减轻了内存的使用压力,但是有些时候我们并不希望cell被重用, 比如自定义的UICollectionViewCell里面包含了一个UIProgressView...
  • leiyadong800
  • leiyadong800
  • 2015年09月05日 11:40
  • 939

collectionViewCell防止复用的两种方法

collectionView 防止cell复用的方法 一: //在创建collectionView的时候注册cell(一个分区) UICollectionViewCell *cell=[...
  • suiyuechenglao
  • suiyuechenglao
  • 2016年11月28日 17:49
  • 3744

iOS 开发 解决UICollectionView的多组头部视图样式不一样复用时发生错乱问题

UICollectionView用起来比UITableView麻烦多了,如何解决多组头部视图复用时出现的错乱问题就很关键头部视图有几种样式就注册几种头部视图 // 防止cell和头部视图复用出现...
  • kuangdacaikuang
  • kuangdacaikuang
  • 2016年12月21日 18:40
  • 2548

关于UICollectionView的headerView的问题

1.collectionView的注意事项:必须注册cell;如果在storyboard添加了可重用标示符,可以不注册.              必须实现代理方法.否则会报错.           ...
  • u011146511
  • u011146511
  • 2016年04月13日 23:24
  • 5150

为UICollectionView的每个section设置footerView和headerView

本文以headerView为例。实现效果如图:首先学习一下这个类UICollectionReusableView,这个类可以代表headerView和footerView。我们创建UICollecti...
  • weichuang_1
  • weichuang_1
  • 2015年10月09日 17:25
  • 4386

IOS开发之CollectionViewCell重用产生重叠的处理方法

最近在公司的项目的时候在使用CollectionViewCell的时候遇到了两个问题: 第一个:无法使用viewWithTag来获取控件 具体情况是:将下拉刷新和CollectionViewCell结...
  • zhaoxiaoyao1987
  • zhaoxiaoyao1987
  • 2016年10月25日 17:22
  • 1485

XZ_iOS之collectionView的header和footer的重用

效果图如下,每一个section的头视图是一个label 代码如下: // 1.创建collectionView UICollectionViewFlowLayout *flowLayout =...
  • understand_XZ
  • understand_XZ
  • 2016年07月05日 09:12
  • 1961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UICollectionView重用时的视图重叠
举报原因:
原因补充:

(最多只允许输入30个字)