在iOS7上的UICollectionViewCell子类中未更新约束

时间:2014-09-23 19:08:02

标签: ios objective-c uicollectionview autolayout

我有一个基于集合视图的布局,具有不同的单元格大小,具体取决于内容。常规单元格为200x200像素,但如果没有内容,则显示与集合视图本身大小相同的单元格。

我用

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

计算正确的尺寸。

然而,我对单元格的子视图不会更新其约束。单元格非常简单,只是一个应该在单元格超视图中居中的UILabel。我有一个水平和一个垂直中心约束(也试图将每个边缘固定到superview)。结果是子视图的大小和位置与Interface Builder(Storyboard)中输入的大小和位置相同。

我为单元格和标签设置了背景颜色,可以看到单元格的大小正确,但标签却没有。

这个问题只存在于iOS7中,并且在iOS8中应该可以正常工作。

请帮忙!

screenshot

2 个答案:

答案 0 :(得分:11)

谢谢Stackover流程相关问题窗格!找到了这个帖子,它解决了我的问题。

Auto Layout in UICollectionViewCell not working

我把它放在我的UICollectionViewCell子类中:

- (void)setBounds:(CGRect)bounds {
    [super setBounds:bounds];
    self.contentView.frame = bounds;
}

答案 1 :(得分:3)

对于我来说,当问题出现在带有swift 2的IOS9上时。我刚刚调用了awakeFromNib()并在autoresizingMask中设置了UICollectionViewCell

我的UICollectionViewCell看起来像这样 - :

override func awakeFromNib() {
   self.contentView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth , UIViewAutoresizing.FlexibleHeight]
}