[请教]如何利用 AutoLayout 实现 Collapable TableViewCell

2015-09-06 09:13:17 +08:00
 Sunnyyoung
如何利用 AutoLayout 实现 Collapable TableViewCell 的效果呢,大家来分享下经验~

同时想问下在使用了 AutoLayout 的情况下,如何比较智能自动地计算 UITableViewCell 的高度?据我所了解的有以下几种:

- 计算每个 Cell 里面元素的 HeightConstraint 加起来
- [UITableView-FDTemplateLayoutCell]( https://github.com/forkingdog/UITableView-FDTemplateLayoutCell )

但是问题来了,如果我使用的是 UITableView-FDTemplateLayoutCell , Cell 里面的元素的高度是需要动态改变的(例如九宫格相册显示),那需要怎么配合使用呢?目前我的方法是根据图片的数量来设置该 View 的 HeightConstraint , ReloadData ,但是有时候会有 AutoLayout 的错误 Log = =

请大家指教指教
3430 次点击
所在节点    iDev
14 条回复
a412739861
2015-09-06 10:52:19 +08:00
自动计算行高?
如果有 autolayout 了。
在 iOS8 下, heightForRowAtIndexPath 下使用 UITableViewAutomaticDimension ,就好了吧,我自己的是这么做的……不过没图,只是文字。
iOS7 下面,取一个不显示在界面上的 cell ,把内容设置进去,然后 cellcontentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1 就好了。
不过图片什么的我就不知道了……
xi_lin
2015-09-06 12:31:04 +08:00
我现在也在用 UITableView-FDTemplateLayoutCell
9 宫格我是用了`UICollectionView`同时根据数量定高算
collapable 也是改变高度约束然后 reloadData

你看到的错误 log 是什么内容?
Sunnyyoung
2015-09-06 14:08:25 +08:00
@xi_lin 我也是跟你一样诶,根据图片的数量来计算行数,从而得到 CollectionView 的高度,设置其 Height Constraint ,但是滚动的时候,有些 TableViewCell 的 CollectionView 的 Height Constraint 会报错。。但是计算没有错误阿,想不通= =

@a412739861 因为要兼容 iOS7 及其以上,感觉用 UITableView-FDTemplateLayoutCell 这个是比较好的选择,但是有图片,而且要根据图片数量来改变高度,就有点麻烦了
a412739861
2015-09-06 16:07:53 +08:00
@Sunnyyoung iOS7 就是我下面说的那个,不过直接复用第三方的就用呗。如果直接设置其他图片的高度为 0 呢
HappyHacking
2015-09-06 16:20:01 +08:00
楼主是想实现类似微信朋友圈那种样子吗?
我没实现过,不过我帮你看了一下微信朋友圈的 UI 结构:
收缩起来的:
http://i3.tietuku.com/ca794ab2d1d7e53d.png

展开来的:
http://i3.tietuku.com/c36ad0a73a62dfc7.png
Sunnyyoung
2015-09-06 16:24:57 +08:00
@HappyHacking 嗯,我也用 Reveal 看过,但是微信的布局没有用到 AutoLayout ,而我想知道用 AutoLayout 怎么实现比较好,毕竟现在 AutoLayout 已经算是一个趋势了吧~
HappyHacking
2015-09-06 16:31:16 +08:00
@Sunnyyoung 你怎么知道没用 AutoLayout 呢?哪里可以看出来?
Sunnyyoung
2015-09-06 16:50:51 +08:00
@HappyHacking 如果使用了 AutoLayout , Reveal 是可以看到对应 Constraint 的
HappyHacking
2015-09-06 17:49:15 +08:00
搜噶, Thanks
xi_lin
2015-09-06 19:19:02 +08:00
@Sunnyyoung 你看看报出来的错是不是真的有不能满足的约束呗。推荐用 Masonry ,报错也更可读一点。
Sunnyyoung
2015-09-07 10:31:55 +08:00
@xi_lin 想请问下你是在哪个地方更新 View 的 HeightConstraint 的呢
xi_lin
2015-09-07 10:57:24 +08:00
@Sunnyyoung `tableView:cellForRowAtIndexPath:`取出 cell 以后更新
Sunnyyoung
2015-09-07 12:11:52 +08:00
@xi_lin 奇了个大怪了,我也是这样的,但是还是报错,计算没问题的阿
xi_lin
2015-09-07 14:39:23 +08:00
@Sunnyyoung 你加大两倍 height 看看能不能消除错误。如果能那就是你计算有问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX