web-dev-qa-db-ja.com

自動レイアウトを使用したUICollectionViewCellの動的高さ

UICollectionViewCellで自動レイアウトを使用しています。したがって、CollectionViewCellがレイアウトに基づいてサイズを決定できるようにするという考え方です。すべての制約は適切に設定されていますが、問題は、データソースメソッドのサイズを計算できないことです。

collectionView:layout:sizeForItemAtIndexPath:

理想的には、次のようにしてセルの高さを計算したいと思います。

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;

ただし、制約を強制的に更新しないため、セルのフレームはゼロです。制約に基づいてセルのサイズを計算する方法を教えてください。

ありがとう

10
Leonid

これが解決策です

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

私はあなたがこのサイズを返すべきだと思います:

return [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
0
jano

UIcollectionViewcontrollerのUICollectionViewCellの動的な高さについては、以下のメソッドを実装する必要があります。

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