UICollectionView头视图重叠

2016-05-12  本文已影响2282人  Freedom_fly
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;
}

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

上一篇下一篇

猜你喜欢

热点阅读