UITableView高度自适应实现方案
UITableView 的高度自适应是 iOS 开发中一个常见但棘手的问题。你经常会遇到这样的情况:cell 内容太多,被截断;或者内容太少,浪费空间。想要让每一行 cell 的高度根据内容动态调整?只需要用上 Auto Layout 和一些代码就行,挺。
在 iOS 8 及以上版本,你可以通过 Auto Layout 和 Size Classes 来实现这一点。只要你正确设置 cell 内容视图的约束,cell 的高度就会随着内容的多少变化,确保每个 cell 都恰如其分。比如,你设置了 UILabel 的约束,左右边距、顶部、底部边距,还有字体大小,UILabel 的高度就会根据内容变化。
接下来就是 UITableView 的几个小技巧了。你需要实现 UITableViewDataSource 协议中的两个方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
和- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
,后者是返回每个 cell 的高度。
有两种常见的计算方式:一种是直接在heightForRowAtIndexPath:
方法中动态计算,另一种是用第三方库FDTemplateLayoutCell
,它可以缓存 cell 高度,减少计算量。
使用FDTemplateLayoutCell
挺:导入库,继承FDTemplateLayoutTableViewCell
,创建模板 cell,在heightForRowAtIndexPath:
方法中调用estimatedHeightForIndexPath:
方法获取高度。其实,FDTemplateLayoutCell
会提前帮你计算好高度,避免每次都计算,挺高效的。
不过,数据量大时,性能还是会受到影响。你可以通过懒加载、异步计算等手段优化。比如,不用一下子加载所有内容,cell 即将显示时再加载;或者使用预估高度来减少计算。
如果你想深入了解,可以下载源代码,里面有详细的步骤和示例代码,自己动手试试。
评论区