2014-09-23 106 views
4

我有一个基于集合视图的布局,具有不同的单元大小,具体取决于内容。普通单元格为200x200像素,但如果没有内容,我会显示与集合视图本身尺寸相同的单元格。在iOS7上的UICollectionViewCell子类中未约束的约束条件

我用

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

计算正确的尺寸。

如何,我的细胞子视图不会更新它的约束。这个单元格非常简单,只是一个应该在单元格超视图中居中的UILabel。我有一个水平和垂直的中心约束(也试图将每个边钉在超视图上)。结果是子视图的大小和位置与Interface Builder(Storyboard)中输入的大小和位置相同。

我已经设置了单元格和标签的背景颜色,可以看到单元格获得了正确的尺寸,但标签没有。

该问题只存在于iOS7中,并且与iOS8中的情况一样。

请帮忙!

screenshot

+0

这是一个有趣的问题。顺便说一下,我最近遇到了类似的问题,但相反的方式:集合视图单元格内的子视图在iOS7中调整父视图后正确对齐其约束,而这在iOS8中并未发生:在后一种情况下,作为walkaround我使用了-layoutSubiews方法来修复iOS8问题。对于这两个iOS版本你会遇到同样的问题感到好奇。我还不知道答案,没有时间深入研究......我不得不快速发布iOS8更新! – viggio24 2014-09-23 19:16:02

+0

我在Xcode 6中作为iOS8项目开始了我的项目,之后又降低了基本目标版本。也许这种行为取决于该项目的创建版本。 – 2014-09-23 19:23:13

+0

你是如何在你的项目的-layoutSubviews中修复它的? – 2014-09-23 19:24:08

回答

11

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

Auto Layout in UICollectionViewCell not working

我把这个在我的UICollectionViewCell子类:

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

这需要单元格后面的标签。我通过这个newSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]来计算单元格的高度; – 2014-10-06 13:11:20

4

对我来说,当该问题是在未来IOS9与SWIFT 2.我刚打电话awakeFromNib()UICollectionViewCell设置autoresizingMask

我UICollectionViewCell看起来像这 - :

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