iOS开发中的可变高度布局如何优雅实现

iOS开发中,经常会碰到一些页面布局,有的部分高度是固定的,有的内容是要从服务器获取后再才能添加进去,所以高度是不确定的,在Android中,采用流式布局,最外面套一个scrollview,然后直接往里面加subview就可以,高度会被自动计算确定。但在iOS中就比较麻烦,我是新手,总结的做法有:

  1. 用tableview来做,但是非常麻烦,需要根据页面元素,把tableview切分成不同的section或者不同的cell,tableview的delegate和datasource需要根据不同的部分来分别响应,代码非常臃肿

  2. 用scrollview来做,不确定的内容部分用一个空白view来占位,然后从服务器得到结果后,建立subview插入到空白view中,但是这种方法也需要计算每个部分的高度,特别是如果包含了可变长度的文本,高度计算就变得很繁杂

  3. 直接用frame的方式,从服务器得到结果后,再开始从上到下构建页面的每个元素,但这种方式也是需要计算各个部分的高度,以便给scrollview一个确定的内容高度

请问各位大侠,iOS中的可变高度的布局,业界习惯是用什么方法来实现的呢?谢谢

可变高度的cell实现现在有两种方式:
1、使用代码计算出来每个cell的高度,然后在tableview中设置;可以参考:http://www.hcios.com/archives/471
2、如果应用只适配iOS8以上的系统,可以用self-sizing来实现。可以参考:http://www.hcios.com/archives/466

很显然就是用 UITableView 做的。切成不同的 section 和 cell 是必要的。代码臃肿可以通过把 dataSource 从 viewController 拆出去解决。

用 scrollView、直接 frame 什么的这些都不是办法。

获取数据前固定死,得到数据后改变大小..

我这数据不多 代码还不算臃肿 而且他变高 变矮 很顺滑…

//一个section刷新

NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2];

[tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];

//一个cell刷新

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:3 inSection:0];

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];

我感觉一般都是下面两种方式的配合:
1、Autolayout。
2、根据 View 对应的 Model 进行动态计算。

大方向上是这样,具体实现就看具体情况了。

http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/

试试
stack View
可能和你说的scrollview 相似,不知道stack view能否自适应,查阅一下文档吧,希望能帮到你
这里有滴滴快车工程师的介绍
http://www.imooc.com/video/11070

发表评论

电子邮件地址不会被公开。 必填项已用*标注