12

如何UICollectionViewCell使用自动布局根据其子视图的大小更改其大小?

UICollectionViewCell的每个人在他们的contentView. 这是UIView我的一个自定义子类,它使用自动布局自动调整自身大小以适应其所有子视图。它也-intrinsicContentSize正确实施。然而UICollectionView,或者更确切地说它的布局,似乎并不关心这一点。

我正在使用UICollectionViewFlowLayout,并尝试过:

  • 保留itemSize其默认值。这给了我大小为 50 x 50 的单元格。
  • 实现委托方法-collectionView:layout:sizeForItemAtIndexPath:。然而,当这个方法被调用时,单元格(显然)还没有出现在屏幕上,也没有被自动布局系统更新。

有什么方法可以使用标准 Apple 类根据子视图更改单元格的大小?或者我必须实现我自己的UICollectionViewLayout子类,还是别的什么?

4

3 回答 3

1

你试过这个:

[self.view layoutIfNeeded];
[UIView animateWithDuration:0.5 animations:^{
     constraintConstantForWidth.constant = subviews.size.width;
     constraintConstantForHeight.constant = subviews.size.height;
     [self.view layoutIfNeeded];
}];

并使约束的优先级(低= 250)

我认为这个问题我们可以通过约束常量替换来处理。

于 2015-09-19T13:12:59.317 回答
0

我用了

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == 0) {
        UIButton *button = (UIButton *)[cell viewWithTag:2];
        CGRect frame = cell.frame;
        frame.size.width = button.frame.size.width;
        cell.frame = frame;
    }

}

并且能够在一个小测试应用程序中根据按钮子视图的宽度调整我的单元格的大小。

确保子视图上的标签大于 0,因为如果使用 0,它只会返回 contentView。除此之外,这应该能让你到达那里

于 2015-07-23T17:28:31.720 回答
-2

尝试collectionView:layout:sizeForItemAtIndexPath:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
     return self.view.frame.size;
}
于 2014-04-16T19:11:19.720 回答