iOS 8 GM 不更新集合视图的约束
Posted
技术标签:
【中文标题】iOS 8 GM 不更新集合视图的约束【英文标题】:iOS 8 GM does not update constraints on collection views 【发布时间】:2014-09-09 20:52:56 【问题描述】:在 Xcode 6 Beta 7 和之前的所有版本中,我有一个集合视图,当 iPad 在横向和纵向之间旋转时,它会更新其对单元格的约束。现在,它根本没有更新,实际上它看起来就像我将它留在 XIB 中的样子,这对我来说意味着它根本没有更新。看来我正在使用的可重用视图正在正确更新,但单元格肯定不是。
还有其他人遇到过这个问题吗?有人对如何克服它有任何想法吗?
我使用的是 ios 7.1 模拟器。
【问题讨论】:
这似乎在 8GM sim 上运行良好,因此问题似乎仅限于 7.1。我会检查 7.0 的 sim。 我也在 7.1 设备和模拟器上看到它。 ios8模拟器正常工作 已确认,这不适用于 iOS 7.1 或 7.0.3 SIM。它也无法在装有 iOS 7.1.2 的 iPad Air 上运行。 【参考方案1】:您需要创建 UICollectionViewCell 的子类,并将该子类作为所有单元格的超类。
例子:
@interface MDTCollectionViewCell : UICollectionViewCell
@end
@implementation MDTCollectionViewCell
- (void)setBounds:(CGRect)bounds
[super setBounds:bounds];
self.contentView.frame = bounds;
@end
【讨论】:
如果不想继承 UICollectionViewCell 也可以在返回单元格之前在方法 cellForItemAtIndexPath 上设置 contentView 框架 @pablobart 是的,这实际上是 Apple Dev Forums 中 cyphers72 建议的原始修复,但这个解决方案更适合我的用例 :) 感谢您的解决方案。我有完全相同的问题。我现在临时使用 XCode 6 Beta 7。 感谢您的解决方案...我遇到了同样的问题,并且试图弄清楚为什么仅在 iOS 7.1 上会发生这种情况感到沮丧。 谢谢!你拯救了我的一天!【参考方案2】:覆盖自定义单元格的 layoutSubviews
作为临时修复:
override func layoutSubviews()
contentView.frame = bounds
super.layoutSubviews()
【讨论】:
这在 Xcode 6 上对我有用,使用 swift...有什么想法不使用它时会出现什么问题? 当与 dispatch_async 混合并在 reloadData() 之后调用它时,这个对我来说实际上是有用的(我使用 CollectionView)【参考方案3】:我想出的解决方法是使用 8.0 模拟器在 sim 中进行测试,并使用 Xcode Beta 7 构建可部署。当我使用 Beta 7 构建时,应用程序在使用 iOS 7 的设备上运行时没有此问题。但是,这对部署到应用商店的任何人都没有帮助,因此如果此解决方法不适用于您的情况,我深表歉意。
【讨论】:
【参考方案4】:在我添加的 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()
)
【讨论】:
以上是关于iOS 8 GM 不更新集合视图的约束的主要内容,如果未能解决你的问题,请参考以下文章