在 ios 8 上工作的 iOs 7 被忽略的约束

Posted

技术标签:

【中文标题】在 ios 8 上工作的 iOs 7 被忽略的约束【英文标题】:Ignored constraint on iOs 7 working on ios 8 【发布时间】:2014-10-06 15:57:01 【问题描述】:

我已经为这个问题苦苦挣扎了好几个小时。

我正在使用一个简单的 CollectionView,它有一个带有自定义 nib 文件的自定义单元格。 我也通过这样做来设置单元格的大小: - (CGSize)collectionView:(UICollectionView )collectionView layout:(UICollectionViewLayout)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath return collectionView.frame.size; 我只是想在单元格中将子视图居中,到目前为止它在 ios8 中运行良好,视图居中,我什至在 viewWillTransitionToSize: 中调用 reloadData,因此单元格大小在旋转时会更新。

iOS8 中的结果

但在 iOs 7 中,我添加到视图中的中心约束似乎完全被忽略了。 实际上,在collectionView:sizeForItemAtIndexPath: 方法中,一旦单元格大小发生更改,它就好像他不听约束一样。

给出这个令人不快的结果:

我是否正确设置了约束?我是不是忘记了 layoutIfNeededneedsUpdateConstraints 之类的东西?

在这里你可以下载一个有我问题的简单小项目。 http://goo.gl/mBmI1H

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我自己回答,

实际上我通过删除界面生成器中的中心约束并将它们添加到这样的代码中来解决问题:

[self addConstraint:
 [NSLayoutConstraint constraintWithItem:self
                              attribute:NSLayoutAttributeCenterX
                              relatedBy:0
                                 toItem:self.connectedContainer
                              attribute:NSLayoutAttributeCenterX
                             multiplier:1
                               constant:0]];

我不明白 -1 因为这是一个真正的问题,我使用的是 Xcode 版本 6.0 (6A313)。

我希望这能帮助遇到我遇到同样问题的人。

【讨论】:

哇!在收集单元中与 IB 中心限制作斗争了这么多小时,这个答案解决了它,感谢分享:)

以上是关于在 ios 8 上工作的 iOs 7 被忽略的约束的主要内容,如果未能解决你的问题,请参考以下文章

iOS:在 iOS 7 和 iOS 8 上将约束应用于子视图的自动布局差异

IOS 8 高度约束动画未按预期工作

IOS 7.1,如果目标设备系列设置为 iPad,通用情节提要上的常规宽度限制将被忽略

约束常量在 iOS 7 中为零,但在 iOS 8 中没有

NSLayoutConstraints 在 ios 7 上崩溃,但在 ios 8 上没有

iOS 8 约束