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;
}
如果出现什么特殊情况,请通知我~