从底部加载UITableView

amb*_*amb 7 iphone uitableview ios ios5

我试图模仿iMessage泡沫文本行为UITableView.为了始终滚动到底部我正在使用scrollToRowAtIndexPathviewDidLoadviewDidAppear.这是因为当viewDidLoad调用该方法时,该表尚未完全加载,因此我需要额外的滚动viewDidAppear.这段代码就是诀窍.但是,我想要的不是动画滚动(设置animatedNO不解决此问题),我希望表格始终从底部显示,而不是加载表格然后转到最后一行.

这可能吗?我找不到任何完全符合所需行为的解决方案.

Chr*_*cou 23

这是最好的解决方案!

只需扭转一切!

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

Swift 4.0:

tableView.transform = CGAffineTransform(rotationAngle: -CGFloat.pi)
cell.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
Run Code Online (Sandbox Code Playgroud)

但要小心,因为现在headerView和footerView位置也是相反的.

  • 这是有史以来最好的答案!和f**很容易! (3认同)
  • 这是一种骇人听闻的解决方案,如果您需要向单元格添加任何类型的轻扫手势/动作,则会导致问题。 (2认同)
  • 使用 -M_PI 似乎将滚动指示器放在左侧。使用 self.tableView.transform = CGAffineTransformMakeScale(1, -1); 将滚动指示器保持在右侧 (2认同)

Num*_*riq 9

您可以避免来自viewDidLoad的调用,因为从viewDidAppear中滚动会使第一个调用变为冗余.每次导航回视图时都会调用viewDidAppear,但只在初始化视图时调用viewDidLoad一次.

我同意早先从用户隐藏滚动的建议,而不是改变UITableView加载数据的方式.我的建议是在viewWillAppear方法中使用scrollToRowAtIndexPath方法,并将动画设置为NO.之后,如果您必须在表对用户可见时添加新行,请使用insertRowsAtIndexPaths:withRowAnimation:在表视图的底部添加一行.一定要注意在数据模型的末尾添加数据,这样当用户导航并返回时,他/她会回到相同的布局.

希望这可以帮助.

编辑:刚刚看到你不接受以前的答案的理由,并认为我会详细说明一点.我建议的解决方案需要尽可能少的工作,避免一次又一次地调用reloadData,从而避免一次又一次地调用scrollToRowAtIndexPath方法.您只需要在viewWillAppear中对scrollToRowAtIndexPath进行一次调用,以滚动到表视图的底部(在执行此操作时隐藏用户的转换),您不需要再次执行此操作.