此视频显示当插入新单元格时,具有延伸到单元格区域外的视图的单元格会暂时被截断:
https://dl.dropboxusercontent.com/u/22105205/CellClipping.mov
这个简单项目清楚地显示了问题,可以用于快速原型制作:
https://github.com/AndresCanella/iOSInsertCellClippingExample.git
可能是某种优化,只使用单元格区域内的pix进行动画制作?
一切都设置正确,稳定,并按预期工作,我们甚至没有使用此示例中的特定单元格数据:
[tableView beginUpdates];
self.cells++;
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationRight];
[tableView endUpdates];
更新
来自DTS的回应:
我担心在调用“insertRowsAtIndexPaths”时,无论您使用何种“UITableViewRowAnimation”,都无法直接影响插入动画行为。细胞内容通常不像那样重叠。在执行每个单元格的动画块时,UITableView只是尊重单元格的边界(不是它的扩展或重叠内容)。
我的评论:
DTS告诉我,事情可以做很多次,而且我总能找到解决方法。所以现在我正在寻找一个解决方案。Apple Bug报告#17986466
答案 0 :(得分:0)
在我看来,您希望不被裁剪的视图超出了单元格本身的界限。对我而言,这说明这些应该是表格视图的子视图而不是单元格。
如果情况确实如此,您可能希望使用普通的UIScrollView而不是UITableView,并为下方插入的视图设置动画。
答案 1 :(得分:0)
根据我的经验,您应该尝试使单元格保持非透明/透明背景,并设置为剪辑子视图,如果您想避免奇怪的布局和动画故障。
单元格查看层次结构的方式是在表格视图中设置的,动画的制作方式是Apple实施的内部方式,在将来的版本中容易发生变化,恕不另行通知。
表视图擅长显示大量行和重用视图,这些内容可能是您的视图未真正使用的。如果您所需的布局不需要多个可滚动内容的屏幕,您可能应该尝试创建自己的基于UIScrollView
的自定义视图,或搜索众多开源库中的一个。您可以完全控制动画并添加自定义行为。
答案 2 :(得分:0)
我知道这是一个完整的黑客 - 但它确实修复了剪辑。
对于粒状动画 - 请查看PRTWeen。 https://github.com/jdp-global/MWDatePicker
我猜您考虑在当前单元格和之前的单元格上切换2个透明背景图像(红色和绿色)(640px x100px)?它可以在插入时使用淡入淡出动画。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.cells++;
[self.tb reloadData];
[self performSelector:@selector(fancyAnimate:) withObject:indexPath afterDelay:0];
}
-(void)fancyAnimate:(NSIndexPath*)path{
NSIndexPath *idx = [NSIndexPath indexPathForRow:path.row inSection:path.section] ;
UITableViewCell *cell = (UITableViewCell*)[self.tb cellForRowAtIndexPath:idx];
CGRect frame = cell.frame;
frame.origin.x = 320;
cell.frame = frame;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
frame.origin.x = 0;
cell.frame = frame;
[UIView commitAnimations];
}