ios开发中如果autolayout来作tablecell的话,假设tablecell分有图没图的场景,如何做cell比较好?
1、为有图的做一个cell,为没图的也做一个cell?
2、就做一个cell,然后用代码方式动态计算cell的高度(似乎抛弃了autolayout)?
以上两种方式,那种方式更优,还望老鸟们来指导一二!
Answers
我觉得可以采用
UITableView-FDTemplateLayoutCell
这是iOS7以后都可以用的,利用autolayout的方式来自动计算cell的高度。可以返回每一个cell的高度。
说一下我的做法,虽然我觉得十分的不合理...但是我还是用了。
我开始判断了有没有图片。有的话设置一个约束,没有的话又设置一个约束。这样就可以自动计算了。
顺便说一下,我是纯代码手写的约束。
那两个 cell 是大部分都不一样,还是只有 有图/没图 这一点不一样呀?
如果大部分不一样肯定是做两个cell好。
如果只是有图没图的区别,这个说实话之前我也觉得有点麻烦……首先你要注意的是,如果一个 view 用了autoLayout,那么你用代码设它的
frame
就不管用了。
如果不想用代码动态计算高度的话,可以把约束动态生成。就是把跟图片有关的约束先不要添加(如果是xib画的,勾上那个remove at build time),然后在运行时判断:如果图片显示的话就添加与图片相关的约束,如果不显示的话就添加一个相对于别的view(比如contentView)的约束。重用cell的时候还要记得调整。这样听起来确实有些麻烦。
另外一种方法就是把view里面的元素多参照 contentView 的高度排,然后高度用代码动态计算。总之避免不了写一点代码。
除此之外还有一些其他方法,比如给image设一个height或width的constraint,然后不显示时把constant设成0……(只适合图片挨边的情况,不然会多出一条空白间隔)或者有玩优先级的…… 不过这些都需要根据 cell 的具体情况具体定啦。
说实话我觉得autolayout在面对这种,视图元素可能显示、可能不显示的情况,确实是显得有些劣势,也不知道有没有什么简单点的办法。抛砖引玉,期待更好的答案。