UICollectionViewCell dynamic height with autolayout

[亡魂溺海] 提交于 2019-11-27 05:58:30

问题


I am using auto layout with UICollectionViewCell. So the idea is to allow CollectionViewCell to determine it's size based on layouts. All the constraints are set properly but the problem is that I can not calculate it's size for data source method

collectionView:layout:sizeForItemAtIndexPath:

Ideally I would like to calculate Cell's height doing the following:

static MyCell *myCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    myCell = [[MyCell alloc] initWithFrame:CGRectZero];
});
cell.model = model;
[cell updateConstraints];
[cell layoutSubviews];
return cell.frame.size;

but it doesn't force constraints to update, so the cell's frame is zero. Can you advice me how can I calculate cell's size based on it's constraints?

Thanks


回答1:


here is the solution

- (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;
 }



回答2:


I think you should return this size:

return [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];



回答3:


For your dynamic height of the UICollectionViewCell in UIcollectionViewcontroller , you need to implement below method: -

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


来源:https://stackoverflow.com/questions/25009907/uicollectionviewcell-dynamic-height-with-autolayout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!