这件事让我生气了 5 天。我有我UITableView
正在填充的NSMutableDictionary
内容,其中包含从 Internet 提取的数据。一切都完美无缺。
我有检查新数据的功能,[NSURLRequest sendAsynchronousRequest...]
如果有新数据,它实际上会返回一些数据。我精心设计了当有用的数据存在时,我将这些数据添加到我的字典[self.tableView reloadData];
中并显示出来。它正在显示但是,这是问题所在。在我的 tableView 下是 textField 和一个允许用户发送消息的按钮。当用户点击文本字段时,键盘会出现(通常),并且我动画该 textField 移动到“向上”,按钮移动到“向上”并且 tableView 高度在键盘打开时可见。这也很好用,如果我在键盘上按回车键,键盘退出,所有的动画都会返回,仅此而已。
问题是,如果我的键盘打开,并且所有内容都向上移动并且 i reloadData
,所有视图都会重置,这意味着 tableView 会返回到它的全高,按钮会返回向下,textField 会返回向下但键盘保持不变......为什么? 为什么视图会自行重置?
我也尝试过使用[self.tableView insertRowsAtIndexPaths...]
不会产生这种效果的想法,但它会做同样的事情。为什么reloadData
和insertRowsAtIndexPaths
(它们在插入新数据方面做得很好)弄乱了我的观点?
另外,如果我打印:
NSLog(@"Size Before: %f", self.tableView.frame.size.height);
[messages setObject:[newMessages objectForKey:key] forKey:date];
messagesKeys = [messages allKeys];
NSIndexPath *oNewIndexPath = [NSIndexPath indexPathForItem:[messagesKeys count] - 1 inSection:0];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:oNewIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
NSLog(@"Size After: %f", self.tableView.frame.size.height);
更新前后我的表格视图的大小,它显示相同的缩小大小,但事实并非如此。TableView、按钮和 textField 正在被重置,看起来像在故事板中......