让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局
文章概要:
1、简介下,tableView中的内容如何高度自适应的布局
2、如何做到让tableView的高度动态调整
还是看图作文吧~
首先,tableView的高度就是用户能够看见里面更大世界的那个窗口的大小,一般是固定的。
然后在cell里面布局的时候,像图中粉红色的view展示的内容需要全部展示出来,这样的话这个粉红view的高度就需要是动态变化的。比如一个UILabel,因为它是属于有内置大小的控件(自身的size通过其内部的内容所决定可以自身计算出来的控件),你只需要设置这个label的原点(x,y)和宽度就行了,当然还要设置lineNumber = 0(不限制行数)。然后cell的高度不要设定成固定数值,cell的高度由内部view决定。
tableView是scrollView的子类,那如何设置contentSize呢?由最后一个cell的底部决定。
OK。这就是我们一般做的tableViewCell高度自适应的布局方式,思维发散下,我们直接用scrollView的时候,设置contentSize也要用这种布局策略:由内部决定外部。
-----------
然后第二个需求是这样的:打开软件弹出赠送的优惠券列表,优惠券多的情况下就固定tableView的高度,让里面的内容可以滚动。如果优惠券少的情况下,里面的内容不足以滚动的情况下,就让tableView本身的高度变为“刚好”能展示里面的内容就行了。
将这个需求转化为技术语言的话就是,给定tableView的contentView一个最大的高度MaxHeight,如果contentView的真实高度小于MaxHeight的时候,tableView的高度就是contentView的真实高度,如果contentView的真实高度大于MaxHeight的时候,tableView的高度就固定在MaxHeight。
实现代码:
- (void)setupMonitor { [self.homePageCouponsTableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { CGRect tableFrame = self.homePageCouponsTableView.frame; tableFrame.size = self.homePageCouponsTableView.contentSize; if (tableFrame.size.height < 280) { [self.homePageCouponsTableView mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(10); make.left.mas_equalTo(self.bgView.mas_left).offset(15); make.right.mas_equalTo(self.bgView.mas_right).offset(-15); make.bottom.mas_equalTo(self.bgView.mas_bottom).offset(-25); make.height.mas_equalTo(tableFrame.size.height); }]; [self.homePageCouponsTableView.superview layoutIfNeeded]; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了