基于自动布局的 View 自动高度计算
本 demo 基于自动布局库 Masonry
,理论上支持任何自动布局库
step 1:UITableViewDelegate
- (CGFloat)tableView:(nonnull UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
return [Cell heightByData:CellData];
}
step 2:View中有两种写法
方式一:实现- (void)setData:(id _Nullable)data
方法,并在其中填充View数据
方法二:如果您已经有了自定义的 View 数据填充方法,那么,您可以在 View 初始化时设置pzSetDataSel
为您自定义的 View 数据填充方法
step 3:在 View 初始化时,请指定pzLastSubView
为当前 View 的最底部控件,和距离 View 底部的距离pzBottomOffset
完成以上三步设置后就可以使用了
原理:View 在数据填充后,调用一下 View 的layoutIfNeeded
即可获取各个控件的frame,以此根据pzLastSubView
和pzBottomOffset
计算出 View 的高度
Q:为什么做成 View 的扩展,而不是 UITableViewCell 的扩展?
A:由于项目中需要给 UITableView 设置 headerView,而 headerView 也将使用自动布局,我们也想在项目中一行代码就完成高度计算,因此,为了让使用更方便,就将其做成 View 的扩展
Q:网上已经有许多 Cell 自动高度计算的库了,为什么还要重复造轮子?
A:1). 我看了别人写的,大部分写的都很复杂,代码量少则三五百行,多则几千行,极为不便于阅读,因此我编写了这个,只有约 200 行代码,核心代码只有约 20 行
2). 许多都是通过 indenPath 去缓存 Cell 高度,而我则通过数据+cell 去缓存
pod 'PZViewAutoHeight'
感谢 HYBMasonryAutoCellHeight 的作者给了我灵感
感谢所有使用本开源库的开发者,感谢你们的 expenditures 和 suggestions。