使用Masonry约束tableHeaderView,解决错位问题

有时候需要往tableHeaderView上添加多个控件,使用Masonry约束更加方便,尤其是控件中的内容不固定时,高度也需要改变,但是在使用过程中发现一些问题,tableHeaderView会把cell的内容覆盖.

遮挡cell

直接上代码

-(void)setupTableHeaderView{

UIView *myTableHeaderView = [[UIView alloc] init];
myTableHeaderView.backgroundColor = [UIColor purpleColor];
self.myTableHeaderView = myTableHeaderView;

[myTableHeaderView addSubview:self.myImageView];
[myTableHeaderView addSubview:self.myContentLabel];

[self.myImageView mas_makeConstraints:^(MASConstraintMaker *make) {
    
    make.top.mas_equalTo(myTableHeaderView).mas_offset(5);
    make.centerX.mas_equalTo(myTableHeaderView);
    make.size.mas_equalTo(CGSizeMake(100, 100));
}];

[self.myContentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    
    make.top.mas_equalTo(self.myImageView.mas_bottom).mas_offset(5);
    make.width.mas_equalTo(myTableHeaderView);
    make.bottom.mas_equalTo(myTableHeaderView).mas_offset(-5);
}];


[self.tableView beginUpdates];
[self.tableView setTableHeaderView:myTableHeaderView];
[self.tableView endUpdates];

//下面这部分很关键,重新布局获取最新的frame,然后赋值给myTableHeaderView
[myTableHeaderView setNeedsLayout];
[myTableHeaderView layoutIfNeeded];
CGSize size = [myTableHeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGRect headerFrame = myTableHeaderView.frame;
headerFrame.size.height = size.height;
myTableHeaderView.frame = headerFrame;

self.tableView.tableHeaderView = myTableHeaderView;

}

完美解决

Demo:https://github.com/lxszl/AutoLayoutTableHeaderView

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,029评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • —— 每场不曾入梦的睡眠,都是虚度光阴 。 确信要离开,是在这场雨下完之前。 就像枯燥的生活,南方的雨似乎永远都下...
    文强卜阅读 526评论 0 2
  • 当我那纯洁的灵魂被世俗感染 我的世界便开始沉沦 即使圣水洗涤 也是肮脏
    让我独醉阅读 307评论 1 1
  • 乐视发誓颠覆传统的汽车产业了。和其他同行不一样,“有清晰的路线图”,果真如此? 不知道从什么时候起,中国的众多创业...
    asker阅读 215评论 0 1