我正在使用Xcode 6 Beta 3,iOS 8 SDK。使用Swift构建目标iOS 7.0。请通过以下屏幕截图逐步说明我的问题。
我在Storyboard中有一个UICollectionView。1个原型UICollectionViewCell,中间包含1个标签(无自动调整大小规则)。紫色背景用来标记由我猜想的Cell在运行时生成的contentView。该视图最终将根据我的UICollectionViewLayoutDelegate正确调整大小,但不会基于iOS7。请注意,我使用的是Xcode 6,该问题仅发生在iOS 7上。
当我在iOS 8上构建应用程序时,一切正常。
注意:紫色是contentView,蓝色是我的带有圆角的UIButton。
但是,在iOS 7上,单元内的所有子视图突然缩小到(0,0,50,50)的帧,并且不再符合我的自动调整大小规则。
我认为这是iOS 8 SDK或Swift或Xcode中的错误?
更新1:官方Xcode 6.0.1中仍然存在此问题!最好的解决方法是像KoCMoHaBTa所建议的那样,方法是在单元格的cellForItem中设置框架(尽管您必须对单元格进行子类化)。事实证明,这是iOS 8 SDK和iOS 7之间的不兼容性(请参阅下面引自Apple的ecotax答案)。
更新2: 将此代码粘贴到cellForItem的开头,一切正常:
/** Xcode 6 on iOS 7 hot fix **/
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
/** End of Xcode 6 on iOS 7 hot fix **/
contentView
使用单元格调整大小,可以很好地解决此问题。我猜想在iOS 8中,Apple更改了在Interface Builder中创建单元格内容视图时的处理方式(无论如何,它仍然是一个黑匣子)。但是,它在以iOS 7为目标时会改变行为,这一事实肯定是一个错误。
contentView
边缘固定到单元格边缘来修复它。