UITableView将行锚定到底部

ima*_*747 40 iphone uitableview

我有一个需要从底部引入新内容的UITableView.这是表视图在视图已满并使用动画添加新行时的行为方式.

我是通过改变contentInset来启动它的,因为引入了行但是当它们改变了一些东西时,条目动画都是错误的...这个方法的问题因为用户可以删除行和行而更加复杂内容更新,导致它们调整大小(每行都有自己的高度,这会改变).

有关如何将UITableView行始终显示在UITableView视图空间底部的任何建议?

ima*_*747 73

我有一个完美适合我的解决方案,但它引起了一堆双重思考,所以它在理论上并不像在实践中那么简单......有点......

步骤1,将变换应用于旋转180度的表视图

tableView.transform = CGAffineTransformMakeRotation(-M_PI);
Run Code Online (Sandbox Code Playgroud)

步骤2,在tableView:cellForRowAtIndexPath中旋转原始单元格180deg:

cell.transform = CGAffineTransformMakeRotation(M_PI);
Run Code Online (Sandbox Code Playgroud)

第3步,反转您的数据源.如果您正在使用NSMutableArray在位置0插入新对象而不是使用AddObject ...

现在,困难的部分是记住左边是右边,右边只留在桌面上,所以如果你使用

[tableView insertRowsAtIndexPaths:targetPath withRowAnimation:UITableViewRowAnimationLeft]
Run Code Online (Sandbox Code Playgroud)

它现在必须是

[tableView insertRowsAtIndexPaths:targetPath withRowAnimation:UITableViewRowAnimationRight]
Run Code Online (Sandbox Code Playgroud)

同样的删除等

根据您的数据存储,您可能需要以相反的顺序处理...

注意:旋转单元格OPPOSITE表,否则浮点空置可能会导致变换完美,并且当你滚动时,你会不时地抓住某些图形...轻微但很烦人.

  • CGAffineTransformMakeScale(0,1)将为零宽度和相同的y坐标.要翻转它们,请使用CGAffineTransformMakeScale(1,-1)! (6认同)
  • 或者,也可以翻转y轴(同样,对于表格和单元格),而不是旋转180度:`CGAffineTransformMakeScale(0,1)` (3认同)

Nic*_*247 42

接受的方法为我的应用程序引入了问题 - 滚动条位于错误的一侧,并且它为UITableViewStyleGrouped破坏了单元格分隔符

要解决此问题,请使用以下内容

tableView.transform = CGAffineTransformMakeScale (1,-1);
Run Code Online (Sandbox Code Playgroud)

cell.contentView.transform = CGAffineTransformMakeScale (1,-1);
// if you have an accessory view
cell.accessoryView.transform = CGAffineTransformMakeScale (1,-1); 
Run Code Online (Sandbox Code Playgroud)

  • 大!当然,您也需要翻转页眉和页脚,并且它们的用途会被交换. (2认同)

Jef*_*Sun 16

类似于ima747的方法,但旋转180度也使滚动指示器转向相反的一侧.相反,我垂直翻转了表视图及其单元格.

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

cell.transform = CGAffineTransformMakeScale(1, -1);//in tableView:cellForRowAtIndexPath:
Run Code Online (Sandbox Code Playgroud)