我正在制作UIViewController
来管理消息传递屏幕。我使用UITableView
和一些自定义单元格来执行此操作。
为简化起见,每个单元格都包含:
UIView
子类)UILabel
)由于性能问题,我没有使用单元格高度的自动调整大小,而是将单元格高度缓存到NSMutableDictionary
。
当用户发送或接收新消息时,我希望发生以下情况:
UITableView
。UITableView
,以便显示新的最后一个单元格。我可以根据需要将其显示在屏幕的最终状态,但两者之间的动画实际上有点时髦。我已经尝试了很多不同的方法来让动画表现出来。基本上,似乎正在进行一些重大的重新加载,即使唯一可以可能更改其高度的单元格是最后一个单元格(在插入新单元格之前)。另外,我想让最后一个单元格出现"出现"没有动画的地方。如果是,它应该在屏幕外,然后我应该能够在屏幕上制作动画。
我的当前"用户发送了一条新消息"方法:
- (IBAction)sendButtonPressed {
//Creation of the new message, into 'message' variable
[self.messages addObject:message];
int thisIndex = (int)self.messages.count - 1;
NSIndexPath *this = [NSIndexPath indexPathForRow:thisIndex inSection:0];
int prevIndex = (int)self.messages.count - 2;
NSIndexPath *prev = [NSIndexPath indexPathForRow:prevIndex inSection:0];
[self removeCachedHeightForIndex:prevIndex];
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[prev] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView insertRowsAtIndexPaths:@[this] withRowAnimation:UITableViewRowAnimationTop];
[CATransaction setCompletionBlock:^{
[self scrollToBottomAnimated:YES];
}];
[self.tableView endUpdates];
}
这似乎重新加载UITableView
中的最后几个单元格。或者,至少,调用它时可见的每个单元格似乎都以某种方式进行动画处理。只有prev
的单元格才会以任何方式发生变化。
长期以来,我可能会将页眉和页脚标签拉出到不同的单元格中,但有没有办法按原样修复此动画故障?