一种让UITableView的数据从下往上增加的方式

遇到问题

通常来讲tableview的数据都是从上往下增加,以下图所示(先是aaa出如今表格列表的最顶部,而后bbb出如今aaa的下面,以此类推)数组

可是若是咱们想反向这个过程该怎么作呢?以下图所示(先是aaa出如今表格列表的最底部,而后aaa被顶上去,bbb出如今aaa原来的位置)app

解决问题

咱们固然第一时间向万能的stackoverflow君求救,找到了这个解决方案code

原理很简单就是让整个tableview上下倒转后再绘制在界面上,让咱们当即验证一下吧,建一个简单的Single View Application工程,而后在Storyboard的那个默认视图上拖一个UITableView,而后作一些必要的设置能让tableview能正常工做(这里就再也不赘述了,相信你们没任何问题)。orm

其中定义一个数组records用于存放须要显示的数据,其中数据以下blog

self.records = @[@"aaa",
                 @"bbb",
                 @"ccc",
                 @"ddd",
                 @"eee",
                 ....
                 ];

而后咱们在-viewDidLoad:中加入如下代码get

self.tableView.transform = CGAffineTransformMakeScale (1,-1);

赶忙运行一下看看博客

咱们发现有两个问题:第一,cell自己的内容是上下颠倒的;第二,bbb出如今了aaa的上面。让咱们一个一个地来解决这些问题。io

解决cell内容上下颠倒问题

先解决第一个问题,其实很是简单,因为是整个tableview的上下颠倒致使了cell内容的上下颠倒,那么要让cell的内容看起来是正常的,只要让cell的内容再次上下颠倒一下就行。咱们就在tableView:cellForRowAtIndexPath:方法中加入如下代码table

cell.contentView.transform = CGAffineTransformMakeScale (1,-1);

此时运行一下会发现cell的内容再也不上下颠倒了。form

解决数据顺序不正确的问题

好了,接下来解决上面的第二个问题,咱们但愿aaa出如今bbb的上面该怎么作呢?其实也很简单,只须要根据NSIndexPath的值取正确的数据就行。

由于咱们整个tableview是上下颠倒的,若是不作任何特殊处理,那么self.records的第一个元素将永远显示在屏幕的最底部。就像在正常状况下,数据的第一个元素永远显示在屏幕的最上部同样。因此解决方案也就呼之欲出,只要在显示数据时候对数据的顺序作一点小小的变动就好了。

固然这也有两种方案,第一种在显示新的数据时改变self.records的内容,在位置0插入新的数据,这在数据是动态生成的时候能够一用,可是若是像咱们在上面已经定义的同样是固定的呢?咱们就不得再也不定义一个mutable的数组而后每次插入数据,此时这个方案就显得繁琐了。

第二种方法就是仅仅在显示时修改每一个数据的index映射方式就成。好比咱们当前须要显示三个元素:"aaa", "bbb"以及"ccc"。咱们要确保aaa要显示在bbb上面,而bbb显示在ccc上面。那么tableView:cellForRowAtIndexPath:中能够作以下计算,当indexPath.Row的值为0时,咱们要取数据"ccc";当indexPath.Row的值为1时,咱们要取数据"bbb";当indexPath.Row的值为2时,咱们要取数据"ccc".

具体代码以下(其中self.numberOfRecords表示当前须要显示多少数据)

NSInteger index = self.numberOfRecords - 1 - indexPath.row;
NSString *record = self.records[index];

最后再运行一下吧,此时就能够看到咱们想要的效果。

总结

若是想看到这种需求到底会产生怎样的效果,能够访问咱们的神剧http://www.shenjuapp.com/(我很想吐槽目前苹果审核的效率。。。所以你们能够先体验一下安卓的版本)。

目前咱们已经作到了更为平滑的滚动,敬请等待咱们的下一个版本,同时也敬请期待从此的博客,我会阐述如何这种状况下的平滑滚动。

相关文章
相关标签/搜索