在 iOS 上的动画期间防止视图从左上角弹出
Prevent views from popping from the top left during animations on iOS
有时当 table 视图单元格出现在动画中时,例如 -[UIView viewWillAppear:animated]
和 -[UITableView reloadData]
,其中的内容从左上角 (0, 0) 弹出到最终帧。这个问题也发生在其他视图动画中。在过去,这个问题并不存在。在一次 iOS 更新中,问题出现了,但初始位置是随机的,通常在屏幕之外。在另一个 iOS 更新中,问题变得确定,初始位置为 (0,0)。
我在 [tableView reloadData]
之后尝试了 [tableView layoutIfNeeded]
、[tableView.layer displayIfNeeded]
以及 cellForRowAtIndexPath
中的单元格。我错过了什么?
我上传了一个示例项目https://github.com/keithyipkw/ios-animation-bug。
要可靠地重现该问题,请在 reloadData 之前在 viewWillAppear 处设置断点。下拉屏幕显示今日中心。 运行今天中心完全可见后。
我也有同样的问题,电视第一次显示单元格时出现这种情况。
这是因为单元格是使用故事板中原型的初始大小创建的,然后根据基于电视宽度的大小调整大小。
为了避免这种情况,在 cellForRowAtIndexPath
中,我将单元格的宽度设置为电视的大小,并强制对单元格进行自动布局更新,以使所有元素都适合该大小。
我仍然没有找到真正的解决方案这更像是一个技巧,我希望其他人对您的问题提供反馈。
解决方法是使用具有重用标识符的出队和初始化单元格。当一个单元格第一次出现时它仍然有效。神奇之处在于使用相同的非空标识符进行出列和初始化。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
有时当 table 视图单元格出现在动画中时,例如 -[UIView viewWillAppear:animated]
和 -[UITableView reloadData]
,其中的内容从左上角 (0, 0) 弹出到最终帧。这个问题也发生在其他视图动画中。在过去,这个问题并不存在。在一次 iOS 更新中,问题出现了,但初始位置是随机的,通常在屏幕之外。在另一个 iOS 更新中,问题变得确定,初始位置为 (0,0)。
我在 [tableView reloadData]
之后尝试了 [tableView layoutIfNeeded]
、[tableView.layer displayIfNeeded]
以及 cellForRowAtIndexPath
中的单元格。我错过了什么?
我上传了一个示例项目https://github.com/keithyipkw/ios-animation-bug。 要可靠地重现该问题,请在 reloadData 之前在 viewWillAppear 处设置断点。下拉屏幕显示今日中心。 运行今天中心完全可见后。
我也有同样的问题,电视第一次显示单元格时出现这种情况。
这是因为单元格是使用故事板中原型的初始大小创建的,然后根据基于电视宽度的大小调整大小。
为了避免这种情况,在 cellForRowAtIndexPath
中,我将单元格的宽度设置为电视的大小,并强制对单元格进行自动布局更新,以使所有元素都适合该大小。
我仍然没有找到真正的解决方案这更像是一个技巧,我希望其他人对您的问题提供反馈。
解决方法是使用具有重用标识符的出队和初始化单元格。当一个单元格第一次出现时它仍然有效。神奇之处在于使用相同的非空标识符进行出列和初始化。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}