iOS tableHeaderView使用frame和Masonry对比
发布日期:2022-04-05 00:52:15 浏览次数:3 分类:博客文章

本文共 4244 字,大约阅读时间需要 14 分钟。

tableHeaderView 对大家都不陌生,一直用到。但使用frame设置和Masonry其实是有差别的。先简述下我遇到的问题

自动布局设置tableHeaderView,滚动会有问题,但tableHeaderView内部使用Masonry是可以的

一、懒加载方式创建tableHeaderView(适合比较复杂的布局,或高度动态变化,时有时无,代码封装,可读性比较好)

1、懒加载创建

- (ICKTrendTopMsgView *)topView {    if (!_topView) {        _topView = [[ICKTrendTopMsgView alloc] init];        WeakObj(self);        _topView.btnClick = ^{            Weakself.iCKTiltleModel.msgBottomCount = nil;            ICKDymMsgListViewController *vc = [ICKDymMsgListViewController new];            vc.unreadMsgIdSet = Weakself.iCKTiltleModel.unReadMessageIdList;            [Weakself pushViewController:vc];            if (Weakself.msgBtnClick) Weakself.msgBtnClick();        };    }    return _topView;}

2、设置tableHeaderView

//  topview 不随tableview滚动//    [self.view addSubview:self.topView];//    [self.topView mas_remakeConstraints:^(MASConstraintMaker *make) {//        make.left.equalTo(self.view.mas_left);//        make.top.equalTo(self.view.mas_top);//        make.height.mas_equalTo(0);//        make.width.mas_equalTo(LL_ScreenWidth);//    }];////    [mainTableView mas_remakeConstraints:^(MASConstraintMaker *make) {//        make.left.equalTo(self.view.mas_left);//        make.top.equalTo(self.topView.mas_bottom);//        make.bottom.equalTo(self.view.mas_bottom);//        make.width.mas_equalTo(LL_ScreenWidth);//    }];    // tableHeaderView 0.01的时候才有效果  topview 随tableview滚动    // frame    self.topView.frame = CGRectMake(0, 0, LL_ScreenWidth, 0.01);    mainTableView.tableHeaderView = self.topView;    //    自动布局设置tableHeaderView 会有问题//    mainTableView.tableHeaderView = self.topView;//    [self.topView mas_remakeConstraints:^(MASConstraintMaker *make) {//        make.height.mas_equalTo(0.01);//        make.width.mas_equalTo(LL_ScreenWidth);//    }];        [mainTableView mas_remakeConstraints:^(MASConstraintMaker *make) {        make.left.equalTo(self.view.mas_left);        make.top.equalTo(self.view.mas_top);        make.bottom.equalTo(self.view.mas_bottom);        make.width.mas_equalTo(LL_ScreenWidth);    }];

3、动态变换tableHeaderView高度

- (void)setICKTiltleModel:(ICKTiltleModel *)iCKTiltleModel{    _iCKTiltleModel = iCKTiltleModel;        if (iCKTiltleModel.msgBottomCount.integerValue)    {        NSString *str = [NSString stringWithFormat:@"%@条新消息",ObjErrorCheck(iCKTiltleModel.msgBottomCount)];        [self.topView.btn setTitle:str forState:UIControlStateNormal];        self.topView.btn.hidden = NO;        self.topView.height = 54;        [self.topView.btn layoutButtonWithEdgeInsetsStyle:MKButtonEdgeInsetsStyleRight imageTitleSpace:10];           }    else    {        self.topView.btn.hidden = YES;//        topview 不随tableview滚动//        [self.topView mas_updateConstraints:^(MASConstraintMaker *make) {//            make.height.mas_equalTo(0);//        }];        self.topView.height = 0.01;    }    // 更新frame之后要重新设置tableHeaderView    // frame    mainTableView.tableHeaderView = self.topView;        }

小记:

1、topview 不随tableview滚动 使用 [self.view addSubview:self.topView];可以正常设置高度,高度变化后直接更新topview高度即可

2、topview 随tableview滚动 使用 mainTableView.tableHeaderView = self.topView; 且用frame方式并且高度要0.01才有效果,高度变化后更新topview高度同时再次设置tableHeaderView

 

二、直接创建tableHeaderView(适合比较简单的表头,高度固定)

UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0,0,0,135)];    bgView.backgroundColor = [UIColor clearColor];    mainTableView.tableHeaderView = bgView;        UIView *contentView = [[UIView alloc]init];    contentView.backgroundColor = XZWL_COLOR_FFFFFF;    [bgView addSubview:contentView];    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.equalTo(bgView).offset(10);        make.left.equalTo(bgView).offset(10);;        make.right.equalTo(bgView).offset(-10);;        make.bottom.equalTo(bgView);    }];    [self.view setNeedsLayout];    [self.view layoutIfNeeded];    [contentView setCornerOnTop:8];        UIImageView *thingsImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"carrer_circle_value_header"]];    thingsImage.contentMode = UIViewContentModeScaleAspectFit;    [contentView addSubview:thingsImage];    [thingsImage mas_makeConstraints:^(MASConstraintMaker *make) {        make.centerX.equalTo(contentView);        make.bottom.equalTo(contentView);    }];

 

转载地址:https://www.cnblogs.com/lijianyi/p/12843215.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:iOS UITableView组头组尾小结
下一篇:iOS (两行代码实现)浮点数保留两位小数且末尾0不展示

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 00时21分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

史上最简单的spring-boot集成websocket的实现方式 2019-04-27
带你玩转属于自己的spring-boot-starter系列(一) 2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二) 2019-04-27
带你玩转属于自己的spring-boot-starter系列(三) 2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分库解决方案(二) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分表解决方案(一) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之关联查询解决方案(三) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之基于seata的分布式事务的解决方案(十五) 2019-04-27
Linux文件管理参考 2019-04-27
FTP文件管理项目(本地云)项目日报(一) 2019-04-27
FTP文件管理项目(本地云)项目日报(二) 2019-04-27
FTP文件管理项目(本地云)项目日报(三) 2019-04-27
FTP文件管理项目(本地云)项目日报(四) 2019-04-27
【C++】勉强能看的线程池详解 2019-04-27
FTP文件管理项目(本地云)项目日报(五) 2019-04-27
FTP文件管理项目(本地云)项目日报(关于不定长包的测试) 2019-04-27
FTP文件管理项目(本地云)项目日报(六) 2021-06-30
FTP文件管理项目(本地云)项目日报(七) 2021-06-30
FTP文件管理项目(本地云)项目日报(八) 2019-04-27