UICollectionView:单元格选择的 minimumInteritemSpacing 变化
UICollectionView: minimumInteritemSpacing change on cell selection
在我的集合视图中,我想缩放所选的集合视图单元格。除此之外,我还想在选择之前和选择之后的单元格之间保持相同的 interItemSpacing,包括放大的单元格。但是,如果我只是通过设置 cell.transform 属性 缩放单元格重叠在邻居 cell.Other 上来缩放单元格,单元格应该自行调整以保持 space。我该如何解决这个问题?
即
cell -50pix- cell -50pix- cell
cell -50pix- scaled cell -50pix- cell
通过应用变换,您只是在放大视图。要调整大小并允许 UICollectionView 的其余部分进行调整,您需要 return 在 sizeForItemAtIndexPath:
中设置一个新大小
选择项目后,您应该使用以下方法在该 indexPath 重新加载该项目:
[collectionView reloadItemAtIndexPath:selectedIndexPath]
将 selectedIndexPath 替换为存储所选 indexPath 的变量的名称。
您不想使布局无效,因为您只是更改一项的外观。
我不知道这是否是最好的解决方案,
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
CollectionViewCell *cell = (CollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
if ([indexPath isEqual:selectedIndexPath]) {
return CGSizeMake(175, 175); // return enlarged size if selected cell
}
return CGSizeMake(150, 150);
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
selectedIndexPath = indexPath; // set selected indexPath
[collectionView performBatchUpdates:^{
[collectionView.collectionViewLayout invalidateLayout];
} completion:^(BOOL finished) {
}];
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(0, 0,0, 0);
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
return 20;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
return 20;
}
在我的集合视图中,我想缩放所选的集合视图单元格。除此之外,我还想在选择之前和选择之后的单元格之间保持相同的 interItemSpacing,包括放大的单元格。但是,如果我只是通过设置 cell.transform 属性 缩放单元格重叠在邻居 cell.Other 上来缩放单元格,单元格应该自行调整以保持 space。我该如何解决这个问题?
即
cell -50pix- cell -50pix- cell
cell -50pix- scaled cell -50pix- cell
通过应用变换,您只是在放大视图。要调整大小并允许 UICollectionView 的其余部分进行调整,您需要 return 在 sizeForItemAtIndexPath:
中设置一个新大小选择项目后,您应该使用以下方法在该 indexPath 重新加载该项目:
[collectionView reloadItemAtIndexPath:selectedIndexPath]
将 selectedIndexPath 替换为存储所选 indexPath 的变量的名称。
您不想使布局无效,因为您只是更改一项的外观。
我不知道这是否是最好的解决方案,
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
CollectionViewCell *cell = (CollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
if ([indexPath isEqual:selectedIndexPath]) {
return CGSizeMake(175, 175); // return enlarged size if selected cell
}
return CGSizeMake(150, 150);
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
selectedIndexPath = indexPath; // set selected indexPath
[collectionView performBatchUpdates:^{
[collectionView.collectionViewLayout invalidateLayout];
} completion:^(BOOL finished) {
}];
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(0, 0,0, 0);
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
return 20;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
return 20;
}