默认情况下,使用UICollectionViewFlowLayout布局的UICollectionView 的 添加元素,没多一行就会会有自动向上滚动。UITableView的效果也是类似的。
(相对于用户来说)为了保持屏幕定位不变,也就是用户操作的某个cell在屏幕上的位置不变,可以这样做:
获取一行的高度,设置UICollectionView的contentOffset,使向反方向滚动一行,然后立即添加元素
示意代码
//在performBatchUpdates中批量执行
[collectionView performBatchUpdates:^{
// 禁用动画效果
[UIView setAnimationsEnabled:NO];
//添加元素
[collectionView insertItemsAtIndexPaths:@[addIndp]];
if (新增一行)
{
// 计算一行高度
CGFloat oneLineHeight= 1000;
CGFloat oneTop = 0;
for (UICollectionViewCell * cell in _collectionView.visibleCells)
{
if (oneTop <= 0 ) {
oneTop = cell.top;
}
else if (oneTop != cell.top)
{
CGFloat tmp = (cell.top - oneTop);
tmp = ABS(tmp);
if (tmp > 1 && oneLineHeight > tmp )
{
oneLineHeight = tmp;
}
}
}
//向上滚动一行
CGPoint offset = collectionView.contentOffset;
offset.y += oneLineHeight;
collectionView.contentOffset = offset;
}
} completion:^(BOOL finished) {
//开启动画效果
[UIView setAnimationsEnabled:YES];
}];