添加新行时,将UITableView滚动到底部

时间:2012-07-16 08:19:45

标签: iphone uitableview

我正在处理的应用程序的一部分涉及一个消息传递界面,我试图使其类似于iOS Messages应用程序的界面。收到或发送新邮件时,我希望表格视图向下滚动并显示插入动画。

到目前为止,我基本上已经这样做了:

- (void)didReceiveNewMessage:(...) {
    [messages addObject:...];                            // add the new message to an array
    NSIndexPath *newIndexPath = [NSIndexPath ...];       // find out where the new cell goes
    [tableView insertRowAtIndexPath:newIndexPath ...];   // animate the insertion of the new message
    [tableView scrollToRowAtIndexPath:newIndexPath ...]; // do the scrolling
}

如果消息缓慢进入,则此方法有效。但是,如果我真的很快地向自己发送了一堆消息,我就注意到表格视图会“变得混乱。”

例如,如果我快速发送消息1,2,3,4,5,6,表视图将动画插入1,2,3和4,然后停止滚动。如果我实际上手动滚动表视图,我可以看到下面的5和6。有人知道更好的方法吗?

我确实尝试setContentOffset:滚动表格视图,但这具有相同的效果。

1 个答案:

答案 0 :(得分:0)

这里的根本问题是我懒惰并使用CGAffineTransformMakeTranslation而不是手动计算新帧,因为我忘记了当transform属性被更改时,根据Apple文档,帧变为“未定义”

它最终工作正常,直到有大量消息进入,此时表格视图的框架将被弄乱并以某种方式偏移,这将导致表格视图的底部显示略低于它应该的位置。 / p>

获得的经验:不要在一个动画中混合帧计算和变换。要么根据框架保留所有内容,要么根据转换保留所有内容,并使用center + bounds