我正在使用UICollectionViewCell的自动布局。因此,我们的想法是允许CollectionViewCell根据布局确定它的大小。所有约束都设置正确,但问题是我无法计算数据源方法的大小
collectionView:layout:sizeForItemAtIndexPath:
理想情况下,我想计算Cell的高度,并执行以下操作:
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;
但它不会强制更新约束,因此单元格的帧为零。你能建议我如何根据它的约束来计算单元格的大小?
由于
答案 0 :(得分:8)
这是解决方案
- (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;
}
答案 1 :(得分:0)
我认为你应该返回这个尺寸:
return [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
答案 2 :(得分:0)
对于UIcollectionViewcontroller中UICollectionViewCell的动态高度,您需要实现以下方法: -
(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath