减小单元格框架的动画效果与放大框架不同。

3
使用以下代码,可以更改单元格的框架并使更改动画化。
   if (_new_h == 200){
        _new_h = 70;
    }
    else{
        _new_h = 200;
    }

    CustomCell *cell = (CustomCell*)[self.collectionView cellForItemAtIndexPath:indexPath];

    [self.collectionView performBatchUpdates:^{
        cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, _new_h);
    } completion:nil];

当增加帧的高度时,动画可以正常工作。当将其减小到原始大小时,单元格的动画会变得粗糙,迅速减小高度,没有动画效果,但集合视图的其余部分会动画变化。
为什么只在减小高度时会发生这种情况?

原始值是否与 new_h == 200 相关? - juanmajmjr
上述代码在didSelectItemAtIndexPath中,因此它会检查属性new_h的值,如果其值为200,则将其设置为70等等。从gif图中可以看到,地址块逐渐增加,但反向变化却是突然的,并立即调整为70而非逐渐变化。 - Nick Ginanto
你能否在高度增加后发布,以便能够看到差异并尝试找到解决方案@Nick Ginanto?谢谢 :) - juanmajmjr
1个回答

0
看了你的gif,似乎在你放大单元格时也会出现同样的问题(即,背景先扩展,然后其余内容跟随)。是的,在第5帧中,背景颜色已经消失了。
要调整UICollectionViewCells的大小,通常会在sizeForItemAtIndexPath:中设置大小,而不是手动设置单元格的框架,你怎么看?
我想你需要调用[self.collectionView.collectionViewLayout invalidateLayout];,然后在collectionView:layout:sizeForItemAtIndexPath:中返回新的大小。
我不确定为什么动画会表现得这样,但我认为这不是改变单元格大小的首选方法,所以这可能会影响它。

不会使布局失效会导致重新计算布局,而不是动画更改吗? - Nick Ginanto
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - cjwirth
实际上,您甚至可能不需要使布局无效。我认为当您调用 performBatchUpdates:时,它可能会自动执行。尽管如此,我认为您需要更改委托方法以返回新的大小,而不仅仅是手动更改单元格的框架。 - cjwirth
但这正是我在问题中编写的代码所做的。new_hsizeOfItemAtIndexPath 中的大小。 - Nick Ginanto
这是吗?我不确定你的 sizeForItemAtIndexPath: 中包含了什么,所以我不能确定。看起来你只是手动更新了单元格本身的大小。你能否制作一个更小的示例项目来重现这个错误? - cjwirth
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接