我在动画一个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];
}];
其他细节,这可能会或可能并不重要:
我有一个类似的问题,并能够停止与UIView的的的UITableViewCell动画performWithoutAnimation:
方法。
使用tableView:willDisplayCell:forRowAtIndexPath:
的UITableViewDelegate方法获取到单元格的引用显示之前。 然后,内performWithoutAnimation:
块,叫layoutIfNeeded
细胞对象上给它一个机会,布局其子视图:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[UIView performWithoutAnimation:^{
[cell layoutIfNeeded];
}];
}
这可能是为时已晚来回答这个问题,但一般出在动画块捕捉所有计划在未来的运行循环未决的布局,在这些类型的案件的问题。
我用的解决方案。 我称layoutIfNeeded动画之前,然后将动画块内(设置或无效任何约束之前)。
在你的情况下,将这样的事情,
[theView addSubview:theTable];
[theTable reloadData];
[theView layoutIfNeeded];
[theTable invalidateIntrinsicContentSize];
[UIView animateWithDuration:.33 animations:^{
[theView layoutIfNeeded];
}];
你有没有考虑过动画而不是定位在表格视图上方不透明子视图?
[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);
}];
先尝试奠定了桌子上,你叫[theView layoutIfNeeded]动画块内之前。 理想情况下,你可以零碎布局和0.33秒钟内,您可能会在桌子上的滚动条,但我们的目标是让动画块外的表格单元布局的变化。