4

我有一些动态添加到UICollectionView. 我想做的是更改这些单元格的插图,使它们出现在UICollectionView. 这是因为添加的单元格越多,单元格高度就会发生变化(它是单个 Row 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——用作单元格的插图。

4

2 回答 2

2

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

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

这就是我使用以下方法计算插图的方式UICollectionViewFlowLayout

- (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];
}
于 2015-09-10T22:35:53.887 回答
1

如果您使用的是网格样式布局,我会尝试这种方法: collectionView:layout:sizeForItemAtIndexPath:

您需要实现 UICollectionViewFlowLayoutDelegate 才能这样做。要让它们堆叠,请将最小偏移量设置为单元格本身大小的负数。这可能需要一些试验和错误。

于 2013-08-23T16:12:03.887 回答