美文网首页
UICollectionView头视图重叠

UICollectionView头视图重叠

作者: Freedom_fly | 来源:发表于2016-05-12 13:44 被阅读2282次
    UICollectionReusableView

    自定义集合视图的头/尾视图时容易出现重叠的情况,尤其文字显示的时候,明显重叠了。(我差点被这个问题折磨死)

    1. 产生问题的原因:

    出现重叠情况的代码如下:

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, M_SIZE.width, M_SIZE.height / 14)];
    label.textAlignment = NSTextAlignmentCenter;
    [headerView addSubview:label];
    

    每次调用设置头视图的方法时,都会重新alloc一个label,所以会有叠加的效果。

    2. 解决方法:(before)

    当初的解决方法是:每次设置HeaderView时,把这个label(或者自己添加到HeaderView上的其他控件)删除。
    这样多次add,多次remove,肯定会影响运行速率的,不推荐使用。
    代码如下所示:
    // 第一种方法:

    for (UIView *view in headerView.subviews) { [view removeFromSuperview]; }
    

    // 第二种方法:

    [view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
    3. 解决方法(now)

    自定义一个头视图/ 尾视图的类,继承于:UICollectionReusableView (也就相当于自定义view,一个可重用的view),然后在这个类的初始化方法中,添加你需要在头视图/ 尾视图显示的控件,这样创建出的头视图/尾, 在使用的时候就不会存在叠加的情况了。
    简单示例代码:

    -(instancetype)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            self.backgroundColor = [UIColor colorWithRed:230 / 255.0 green:230 / 255.0 blue:230 / 255.0 alpha:1.0];
            _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, M_SIZE.width, M_SIZE.height / 14)];
            _titleLabel.textAlignment = NSTextAlignmentCenter;
            [self addSubview:_titleLabel];
        }
        return self;
    }
    

    如果出现什么特殊情况,请通知我~

    相关文章

      网友评论

          本文标题:UICollectionView头视图重叠

          本文链接:https://www.haomeiwen.com/subject/gdyerttx.html