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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.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
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