防止在iOS动画期间从左上角弹出视图

时间:2016-04-03 14:16:53

标签: ios objective-c uitableview cocoa-touch uiviewanimation

有时,当表格视图单元格出现在动画中时,例如-[UIView viewWillAppear:animated] -[UITableView reloadData][tableView layoutIfNeeded],其中的内容从左上角(0,0)弹出到最终帧。在其他视图动画中也会出现此问题。回到过去,这个问题不存在。在一次iOS更新中,问题出现了,但初始位置是随机的,通常在屏幕外。在另一个iOS更新中,问题变得确定,初始位置为(0,0)。

我在[tableView.layer displayIfNeeded]之后尝试了[tableView reloadData]cellForRowAtIndexPath,在{{1}}中的细胞上尝试了{{1}}。我错过了什么?

我上传了一个示例项目https://github.com/keithyipkw/ios-animation-bug。 要可靠地重现该问题,请在reloadData之前在viewWillAppear处设置断点。拉下屏幕以显示今天的中心。在今天的中心完全可见后运行。

screenshots

2 个答案:

答案 0 :(得分:0)

我也有同样的问题,当电视第一次显示细胞时会发生这种情况 这是因为在故事板中使用原型的初始大小创建单元格,然后在基于TV宽度的大小上调整大小。 为了避免在cellForRowAtIndexPath中,我将单元格上的宽度设置为电视的大小并强制在单元格上进行自动布局更新,以使所有元素都符合该大小。
我仍然没有找到真正的解决方案这是一个更多的伎俩,我希望其他人对你的问题给出反馈。

答案 1 :(得分:0)

修复方法是使用带有重用标识符的dequeue和init单元格。当细胞第一次出现时它仍然有效。神奇的是使用相同的非空标识符出列和初始化。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}