iOS 8 GM无法更新集合视图上的约束条件。

14
在Xcode 6 Beta 7及之前的所有版本中,我有一个集合视图,当iPad在横屏和竖屏之间旋转时,它会更新其单元格上的约束条件。现在,它根本不更新,实际上它看起来完全像我在XIB中留下的样子,这意味着它根本没有更新。看起来我正在使用的可重用视图更新正确,但是单元格肯定没有。

还有其他人遇到过这个问题吗?有任何想法如何解决它吗?

我正在使用iOS 7.1模拟器。


这在8GM sim上似乎运行良好,因此问题仅出现在7.1上。我会检查7.0 sim。 - Sean Freitag
我在7.1设备和模拟器上都看到了这个问题。iOS8模拟器可以正常工作。 - Jordan McMillan
确认,这在iOS 7.1或7.0.3 SIM卡上不起作用。我的iPad Air在iOS 7.1.2上也无法正常工作。 - Sean Freitag
4个回答

28
你需要创建一个UICollectionViewCell的子类,并将该子类作为所有单元格的超类。
示例:
@interface MDTCollectionViewCell : UICollectionViewCell
@end

@implementation MDTCollectionViewCell

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

@end

2
如果您不想子类化UICollectionViewCell,您也可以在方法cellForItemAtIndexPath中设置contentView的frame,然后返回单元格。 - pablobart
@pablobart 是的,那确实是cyphers72在Apple Dev论坛上建议的最初修复方法,但这个解决方案对我的用例来说更加简洁 :) - Sean Freitag
感谢您提供的解决方案。我遇到了完全相同的问题。我现在暂时使用XCode 6 Beta 7。 - Ricky
谢谢你的解决方案...我也遇到了同样的问题,一直在苦苦寻找为什么只有在iOS 7.1上会出现这种情况。 - Uzair Khan
在找到这个问题之前,我已经浪费了半天的时间。我没有意识到它是特定于Xcode 6,iOS 7.1模拟器的。截至Xcode 6.0.1(6A317),这仍然是一个问题。只是一个提示,我通过在“collectionView:cellForItemAtIndexPath:”中添加[cell.contentView setFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];来最接近解决方案,但问题在于子视图(如按钮)的布局不正确,并且不再响应交互。幸运的是,Freitag先生解决了这个问题。现在工作得非常好。 - Justin Whitney
显示剩余2条评论

3

作为临时解决方案,覆盖自定义单元格的layoutSubviews

override func layoutSubviews() {
    contentView.frame = bounds
    super.layoutSubviews()
}

这在使用Swift的Xcode 6上适用于我...没有使用这个会出什么问题,有什么想法吗? - Kiko Lobo
这个对我来说实际上是有效的(我在CollectionView中使用了它),当与dispatch_async混合使用,并在reloadData()之后调用它。 - Sruit A.Suk

0
在我的UICollectionViewCell类中,我添加了:
override func layoutSubviews() {
    contentView.frame = bounds
    super.layoutSubviews()
}

我使用了这段代码来刷新

dispatch_async(dispatch_get_main_queue(), { () -> Void in
    // in this case vController is UICollectionView
    self.vController.reloadData()
    self.vController.layoutSubviews()
})

0
我想到的解决方法是在模拟器中使用8.0版本进行测试,并使用Xcode Beta 7构建可部署文件。当我使用Beta 7进行构建时,该应用程序在使用iOS 7的设备上运行时不会出现此问题。但是,这对于将应用程序部署到应用商店的人没有帮助,如果这种解决方法对您的情况无效,我深表歉意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接