前几天看到一份实现了TableViewCell收缩展开的源码,感觉实现方式很独特,对以后我做其他效果也算是提供了一种新思路,特此记录下来。
他通过代码内更改约束的优先级来实现不同布局。
图中可以看到,他在Cell的ContentView里面放了一个ContainerView,并令Label的边界与ContainerView的边界重合,而且我们需要知道的是,Label的VerticalConstrain默认是800,也就是说,如果竖直方向上其它Constrain的优先级都不足800的话,Label则会按内容的大小排布。
“显示全部”这个Button放在ContainerView的下面并向上设置好了距ContainerView和向下距ContentView的距离,用于自动推测Cell高度(因为设置了 estimatedRowHeight 和 rowHeight = UITableViewAutomaticDimension)。
他从storyboard拖了两条线到自定义Cell类中,分别是ContainerViewHeightLayoutConstrain和containerViewBottomLayoutConstrain,一个是约束ContainerView的高度为86,一个是约束ContainerView的底边与ContentView重合,但是默认状态下第二条约束优先级低不生效,ContainerView默认底边位于“显示全部”Button的上方。