如何在iOS中为uicollection视图单元格制作动态大小?

时间:2015-10-07 07:14:42

标签: ios objective-c xcode ipad autolayout

我正在使用uicollection视图以网格视图格式显示图像。我能够显示单元格但高度和高度。 iPad的宽度不会增加它只显示为小块。请告诉我如何让它变得动态。

[![在此处输入图像说明] [1]] [1]

我使用以下代码使其动态化。

pragma mark集合视图布局事物

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    if (collectionView==self.album_collection_view) {
        return 2.0;
    }
    else
        return 2.0;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    if (collectionView==self.album_collection_view) {
        return 2.0;
    }
    else
        return 2.0;
}
// Layout: Set Edges
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    // return UIEdgeInsetsMake(0,8,0,8);  // top, left, bottom, right
    if (collectionView==self.album_collection_view) {
        return UIEdgeInsetsMake(5,0,0,0);
    }// top, left, bottom, right
    else
        return  UIEdgeInsetsMake(5,0,0,0);

}

请告诉我如何解决此问题?

2 个答案:

答案 0 :(得分:1)

这是解决方案

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

YourCollectionCell * cell = (YourCollectionCell *) [YourCollectionViewObj cellForItemAtIndexPath:indexPath];

        if (cell == nil) {

            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"YourCollectionCell" owner:self options:nil];
            cell = [topLevelObjects objectAtIndex:0];
            cell.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 20);
            // SET YOUR CONTENT
            [cell layoutIfNeeded];

        }

        CGSize CellSize = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize withHorizontalFittingPriority:UILayoutPriorityDefaultHigh verticalFittingPriority:UILayoutPriorityDefaultLow];


        return CellSize;}

如果上述解决方案无法满足您的需求,为了获得您想要的内容,您应该创建自己的UICollectionViewLayout(或者可能是UICollectionViewFlowLayout)子类,您可以在其中执行将每个项目放在右侧框架中所需的所有计算。

点击此处查看great tutorial,此处查看something similar to what you want

答案 1 :(得分:-1)

如果要增加单元格的高度和宽度,则必须使用$(staticParent).on(event, selector, callback); 方法。为此,您必须添加sizeForItemAtIndexPath委托。

UICollectionViewDelegateFlowLayout