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];



相关文章推荐

UICollectionView与UITableView在复用时,数据重叠问题

在进行了cell的复用后,如果要避免出现数据重叠,图片错乱的问题,首先要注意,cell中Label、Button、ImageView等的创建要放在初始化方法里面,tableViewCell的初始化方法...

ios UICollectionView的cell重叠

问题描述:最后一个cell上会叠加一个类似于支付宝的新字图标在cell的左上角。当点击其它cell时,这个新字图标会在其它cell上重叠显示。 第一种方法:设置cell的frame (如下红...

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

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

UICollectionView重用机制的问题

肯定会有很多人遇到下面这样的问题。。。 其实我们只需要在 UICollectionViewCell *cell = [collectionView dequeueReusableCellWith...

iOS 关于UICollectionView的cell重用问题

UICollectionView重用机制减轻了内存的使用压力,但是有些时候我们并不希望cell被重用, 比如自定义的UICollectionViewCell里面包含了一个UIProgressView...

CollectionView设置UICollectionReusableView头尾视图

// ViewController.m#import "ViewController.h"@interface ViewController ()// 使用sb视图中的FlowLayout @pro...

UICollectionView headerView悬浮 类似于UItableView的Section

这个连接中的内容可以解决这个问题 http://stackoverflow.com/questions/13511733/how-to-make-supplementary-view-float-in...

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

UICollectionView用起来比UITableView麻烦多了,如何解决多组头部视图复用时出现的错乱问题就很关键头部视图有几种样式就注册几种头部视图 // 防止cell和头部视图复用出现...

iOS 解决使用Cell的复用导致视图重叠的问题

//在collectionView:cellForItemAtIndexPath:方法里一个合适的位置加上: for (UIView * view in cell.contentView.sub...

UITableviewcell重用机制以及解决重绘出现的重叠现象

转载自:  http://m.blog.csdn.net/blog/heyehao2008/27806945 在使用TableView的时候,下面一段代码是必须的,也是最标准的: - (UITa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UICollectionView重用时的视图重叠
举报原因:
原因补充:

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