Ios 缩小单元框架不';t设置动画与放大帧相同
使用以下代码,更改单元格的帧,然后设置更改的动画Ios 缩小单元框架不';t设置动画与放大帧相同,ios,animation,uicollectionview,Ios,Animation,Uicollectionview,使用以下代码,更改单元格的帧,然后设置更改的动画 if (_new_h == 200){ _new_h = 70; } else{ _new_h = 200; } CustomCell *cell = (CustomCell*)[self.collectionView cellForItemAtIndexPath:indexPath]; [self.collectionView performBatchUpdate
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];
增加帧的高度时,动画将正常工作。
当将其减小到原始大小时,单元的动画很笨重,在没有动画的情况下会快速降低高度,但collectionview的其余部分会为更改设置动画
为什么只有在降低高度时才会出现这种情况?看你的gif,当你放大单元格时,看起来可能也会出现同样的问题(即,背景先展开,然后是其他内容)。是的,在第5帧中,背景色已经消失了 要调整
UICollectionViewCells
的大小,您是否通常会在sizeForItemAtIndexPath:
中设置大小,而不是手动设置单元格的框架
我想你应该调用[self.collectionView.collectionViewLayout]然后在collectionView:layout:sizeForItemAtIndexPath:
我不确定动画为什么会这样,但我不认为这是更改单元格大小的首选方法,因此可能会影响它。原始值是否与new\u h==200
相关?上面的代码在didSelectItemAtIndexPath中,因此它会检查属性new\u h,如果它是200,它会将其设置为70,等等从gif中你可以看到地址逐渐增加的块,但反过来是突然的,立即调整到70,而不是逐渐增加。当地址增加高度时,你可以看到差异并尝试找到解决方案@Nick Ginanto?谢谢:)布局无效不会导致布局重新计算,而不会设置更改的动画吗?我认为您仍然需要设置更改的动画。1) 使布局无效。2) 调用performbatchudates:
并进行任何需要的更改,以便可以在此块内的sizeForItemAtIndexPath:
中返回新的大小。3) 确保在sizeForItemAtIndexPath:
中返回新的大小。我认为这应该行得通。它类似于UITableView
的begin/endUpdates
实际上,您甚至不需要使布局无效,我认为当您调用performBatchUpdates:
时,它可能会自动执行此操作。不过,我认为您需要更改它以在委托方法中返回新的大小,而不仅仅是手动更改单元格的帧。但这正是我在问题中编写的代码中所做的new_h
大小是否为SizeFiteMatinDexpath?是吗?我不确定您的SizeFormiteIndeXPath:
中有什么内容,所以我不能确定。看起来您只是在手动更新单元格本身的大小。您是否能够制作一个较小的示例项目来重现错误?