我正在重新加载UITableview的数据,因为行数,部分和行高度发生了显着变化。为了缓和过渡,我在点击按钮时选择了下面的过渡。如果我将reloadData和/或内容偏移代码放在动画块中,结果是“hacky”/“stuttering”。如果我在动画之前放置视图更改,它就像梦一样。 为什么这样做?我是否使用transitionWithView(iOS 10.1)的错误行为。该如何正确完成?
[self.tableView reloadData];
CGPoint bottomOffset = CGPointMake(0, [self.tableView contentSize].height + [self.tableView contentInset].bottom - self.tableView.frame.size.height);
[self.tableView setContentOffset:bottomOffset animated:NO];
[UIView transitionWithView: self.tableView
duration: 0.35f
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^(void)
{
}
completion: nil];
答案 0 :(得分:0)
transitionWithView通常用于更改屏幕的整个视图,而不是显示其某些部分的更改。 就像Apple说:
转换动画将一个视图控制器的内容交换为另一个视图控制器的内容。
所以在大多数情况下,要使用简单的动画,建议使用
[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations completion:^(BOOL finished)completion]
或者还有另一种动画观看方式
[UIView beginAnimations:(nullable NSString *) context:(nullable void *)]
//place your view changes here to animate it
//......
[UIView commitAnimations]
还有一个tableView具有的方法
[tableView insertRowsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *) withRowAnimation:(UITableViewRowAnimation)]
您可以选择多个选项来动画将新数据添加到tableView。基本上,您将新数据添加到在表视图中显示的对象数组中,然后调用此方法以显示您所做的更改。 另一方面,您可以尝试其他方法
[tableView beginUpdates];
//make some changes
[tableView endUpdates];
在上述两种情况下,您不需要调用[tableView reloadData],因为它们都可以自行完成。