gpt4 book ai didi

ios - 使 UICollectionViewCell 出现在 UICollectionView 的中心

转载 作者:可可西里 更新时间:2023-11-01 05:45:02 24 4
gpt4 key购买 nike

我有一些动态添加到 UICollectionView 的单元格。我想要做的是更改这些单元格的插图,使它们出现在 UICollectionView 的中心。这是因为添加的单元格越多,单元格高度就会发生变化(它是单个行 UICollectionView)。

- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
// This method is used to center when one tile is entered else use a standard no inset
if (self.wordArray.count == 1) {
CGFloat newWidth = (self.tileCollectionView.bounds.size.width - self.tileCollectionView.bounds.size.height);
return UIEdgeInsetsMake(0, (newWidth / 2), 0, (newWidth/2));
} else {
return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right
}
}

我如何获取对 UICollectionViewCell 当前高度的引用,对于任何单元格,因为它们的形状都相同(只是当添加更多单元格时它们的高度/宽度会发生变化以继续适合一个单元格行。

一旦我有了对单元格高度的引用,我就可以添加如下内容:self.tileCollectionView.bounds.size.height - CELLHEIGHT/2 -- 用作单元格的插图。

最佳答案

如果所有单元格的大小都相同,并且假设您使用的是 UICollectionViewFlowLayout,则可以使用它来获取它们的大小:

UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
CGFloat width = flowLayout.itemSize.width;
CGFloat height = flowLayout.itemSize.height;

这就是我使用 UICollectionViewFlowLayout 计算 insets 的方式:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
NSInteger numberOfCells = self.view.frame.size.width / flowLayout.itemSize.width;
NSInteger edgeInsets = (self.view.frame.size.width - (numberOfCells * flowLayout.itemSize.width)) / (numberOfCells + 1);
return UIEdgeInsetsMake(0, edgeInsets, 0, edgeInsets);
}

您还需要确保在屏幕旋转时使布局无效,以使其再次计算新的插图:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.collectionView.collectionViewLayout invalidateLayout];
}

关于ios - 使 UICollectionViewCell 出现在 UICollectionView 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com