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

Posted

技术标签:

【中文标题】约束常量在 iOS 7 中为零,但在 iOS 8 中没有【英文标题】:Constraint constant is nil iOS 7 but not in iOS 8 【发布时间】:2015-02-15 16:03:03 【问题描述】:

我有 3 个插座可以更改 3 个视图中的常量变量,但似乎无法理解为什么会发生这种情况。注意:这与界面无关(因此没有 setneedlayout 或 layoutifneeded 答案)。我明白了。

// ios 7
_fillerConstraint.constant = 200;
NSLog(@"_fillerConstraint: %f", _fillerConstraint.constant);

2015-02-15 08:55:14.54 飓风[44367:613] _fillerConstraint: 0.000000

// iOS 8
 _fillerConstraint.constant = 200;
NSLog(@"_fillerConstraint: %f", _fillerConstraint.constant);

2015-02-15 08:55:14.547 飓风[44367:613] _fillerConstraint: 200.000000

从 viewwillappear 调用一个方法来设置这些值并做一些动画。在 iOS 8 中一切正常并按预期工作。但是在 iOS7 中,调试器报告约束为零。有谁知道什么可能导致这种行为?

【问题讨论】:

_fillerConstraint 在第一个示例中是否有可能由于某种原因为零? @PhillipMills 你是对的!它在 iOS 7 中报告为零。我将属性设置为弱和强,它是零。我很困惑为什么。 您处于我不太了解的领域,但我想知道在初始化约束时是否发生了操作系统更改。如果将代码移至viewDidAppear,结果会有所不同吗? @PhillipMills 不,它仍然是 nil viewdidappear。为什么它在 iOS 7 中为 nil 肯定有一些症状。我不知道如何调试它。 您是否使用仅在 iOS 8 中提供的自动布局功能?比如尺寸等级或布局边距? 【参考方案1】:

清理应用并重置模拟器后。它工作正常。此类问题的答案是,Xcode 6 充满了 bug。

【讨论】:

这行得通(Xcode 6.3)。此外,强烈建议在最后一次调整之前禁用类并取消使用它,以避免出现这种情况和其他意外结果。【参考方案2】:

这听起来可能很愚蠢,但对于未来的傻瓜来说,我的问题是约束所在的视图不再位于视图层次结构中(我删除了它),所以显然约束是 nil。

【讨论】:

以上是关于约束常量在 iOS 7 中为零,但在 iOS 8 中没有的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 iOS 7 中为按钮添加约束?

由于某种原因,托管对象上下文在 iOS 中为零

iOS 自动布局 ios 7 与 ios 8

iOS 纵横比约束在 iOS 7 上中断,适用于 iOS 8

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