UITableViewCell中嵌套UICollectionView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableViewCell中嵌套UICollectionView相关的知识,希望对你有一定的参考价值。

参考技术A 之前公司给我分配了一个任务,作为我实习期的一个考核。这个任务主要是使用RAC+MVVM去编写的,其中有一个核心界面算是比较的复杂吧。这个界面其实就是一个UITableView,当中有一个cell中包含了UICollectionView来显示城市列表。因为每个城市的名字长度不一样,所以也会涉及到UICollectionViewCell的布局问题。

我们可以看到DAY1这个cell中包括一个UICollectionView来展示城市列表。这里的话有两个地方需要注意一下:1.因为城市的字数有的长有的短,所有UICollectionViewCell的长度是不确定的,这样导致UICollectionViewCell的布局并不是像现在这样都是左对齐的,cell之间的间距并不是固定的。          2.cell的高度要根据UICollectionView展示内容的高度变化而变化,确保能够完全展示所有的城市列表(意思就是不用去滑动UICollectionView来查看城市列表)

对于第一个问题:在上面的布局中我们发现每两个UICollectionViewCell之间的间隔是相等的,如果我们使用系统自动帮我们布局的话,cell之间的间隔将会不一样。我们在SB中只能设置最小行间距和最小列间距,并不能设置固定间距。所以为了到达上面的效果,我们需要重写UICollectionViewDelegateFlowLayout中的四个方法。   

 解决方法:1.先创建一个类(继承UICollectionViewDelegateFlowLayout),重写这四个方法。                                            

                   2.设置UICollectionView的collectionViewLayout属性值为我们刚刚创建的类。                                   

最主要的还是prepareLayout方法,在这个方法体中我们要自己计算每个cell的位置,保证每两个cell之间的间距一定。

对于第二个问题:刚开始我想使用网上动态改变cell高度的三方库( 优化UITableViewCell高度计算的那些事 )去做的,但是这个三方库在这里是无法使用的。因为UICollectionView本身就继承UIScrollView,我们这里能够改变的只是UICollectionView中cell的个数,并不能改变UICollectionView的高度,因此也就无法用三方库的方法去改变UITableViewCell的高度。                                                                                                                                

 解决方法:根据城市列表的数据源,计算出UICollectionView所需要的显示高度,然后在heightForRowAtIndexPath方法中将计算出的高度赋值给对于的cell。计算高度的方法和上面计算每个UICollectionViewCell位置的方法思路是差不多的。

这篇文章可以说的还不是太详细,解决方案也许也不是最好的。如果你有什么不理解的地方或者有更好的解决方法,欢迎留言交流。 Github地址 ,算高方法 主要是Utils.m文件中changeCollectionViewHeight方法。

以上是关于UITableViewCell中嵌套UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell中嵌套UICollectionView

FetchedResultsController 并在一个 UITableViewCell 中显示来自 3 个嵌套实体的数据

UITableViewCell嵌套UICollectionView滑动错乱问题

UITableViewCell嵌套UIWebView并且cell根据webView的内容自适应

UITableViewCell嵌套UITableView的正确姿势

UICollectionView insertSections 错误 - NSInvalidArgumentException 原因 setObjectForKey 对象不能为 nil UIColle