动画一个UITableView时,从动画停止UITableViewCells(Stop UITabl

2019-09-01 10:20发布

我在动画一个UITableView。 我想表视图滑动这样的开放:

http://www.youtube.com/watch?v=XIGJLbiRsXE

但是,它是这样开的:

http://www.youtube.com/watch?v=UJUX-ILCB_0

请注意如何表格单元格本身动画。 我怎样才能阻止这种情况发生?

我使用的自动布局。 该代码是这样的:

[theView addSubview:theTable];
[theTable reloadData];
[theTable invalidateIntrinsicContentSize];
[UIView animateWithDuration:.33 animations:^{
    [theView layoutIfNeeded];
 }];

其他细节,这可能会或可能并不重要:

  • 表视图的母公司是滚动型

  • 我已经覆盖了表视图的intrinsicContentSize返回在表格视图中的所有单元格的高度,所以表视图不会滚动

  • 我改变了表视图的数据源显示之前

Answer 1:

我有一个类似的问题,并能够停止与UIView的的的UITableViewCell动画performWithoutAnimation:方法。

使用tableView:willDisplayCell:forRowAtIndexPath:的UITableViewDelegate方法获取到单元格的引用显示之前。 然后,内performWithoutAnimation:块,叫layoutIfNeeded细胞对象上给它一个机会,布局其子视图:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [UIView performWithoutAnimation:^{
        [cell layoutIfNeeded];
    }];
}


Answer 2:

这可能是为时已晚来回答这个问题,但一般出在动画块捕捉所有计划在未来的运行循环未决的布局,在这些类型的案件的问题。

我用的解决方案。 我称layoutIfNeeded动画之前,然后将动画块内(设置或无效任何约束之前)。

在你的情况下,将这样的事情,

[theView addSubview:theTable];
[theTable reloadData];
[theView layoutIfNeeded];
[theTable invalidateIntrinsicContentSize];
[UIView animateWithDuration:.33 animations:^{
    [theView layoutIfNeeded];
 }];


Answer 3:

你有没有考虑过动画而不是定位在表格视图上方不透明子视图?

[theView addSubview:theTable];
[theTable reloadData];

UIView *subview = [[UIView alloc] initWithFrame:theTable.frame];
subview.backgroundColor = [UIColor whiteColor];
[theView addSubview:subview];

[UIView animateWithDuration:0.33 animations:^{
    subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.size.height, subview.frame.size.width, 0.0);
}];


Answer 4:

先尝试奠定了桌子上,你叫[theView layoutIfNeeded]动画块内之前。 理想情况下,你可以零碎布局和0.33秒钟内,您可能会在桌子上的滚动条,但我们的目标是让动画块外的表格单元布局的变化。



文章来源: Stop UITableViewCells from animating when animating a UITableView