UICollectionView头视图重叠

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 3,926评论 1 22
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,255评论 4 61
  • 本周总体总结 本周给自己打9分,差的一份在拆书帮资料没有上传。这周去参加小鹿宝宝的百日宴,又参加了合肥第四届马拉松...
    羽青阅读 261评论 0 1
  • 你 那么美 那么美 我想我是幸运的 遇见了你 世界上有那么多可以去爱的人 但爱过的人又有多少 遇见你 便已足矣
    叶子困了阅读 156评论 0 0
  • 听过一次成甲的成甲说书,看过一次他的直播,瞬间被其圈粉。后来申叔又在群中大力推荐这本书,评价这本书为好书,而且要排...
    exsnoopy阅读 321评论 0 0