【问题标题】:Can I just ignore "Unable to simultaneously satisfy constraints"?我可以忽略“无法同时满足约束”吗?
【发布时间】:2014-12-02 05:37:49
【问题描述】:

我正在将现有应用更新为自动布局以支持更多设备尺寸。我有一些需要动画的对象,而不是使用约束,我将它们设置为:

self.secondCounter.translatesAutoresizingMaskIntoConstraints = YES //example

使用旧的 setFrame 方法。

这似乎可行,但在第一个动画上会引发运行时错误:

无法同时满足约束。可能至少有一个 以下列表中的约束是您不想要的。尝试 这个:(1)查看每个约束并尝试找出你 不要期待; (2) 找到添加了不需要的约束的代码或 约束并修复它。 (注:如果你看到 NSAutoresizingMaskLayoutConstraints 你不明白的,参考 到 UIView 属性的文档 translatesAutoresizingMaskIntoConstraints) ( "", "", "")

将尝试通过打破约束来恢复

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点 在调试器中捕获它。中的方法 UIView 上的 UIConstraintBasedLayoutDebugging 类别列于 也可能有帮助。 2014-10-07 19:41:12.903 AppName[5018:1153922] 无法同时满足约束。 以下列表中的至少一个约束可能是一个 你不想要。试试这个:(1)查看每个约束并尝试 找出你没想到的; (2) 找到添加的代码 不需要的约束或约束并修复它。 (注:如果你看到 NSAutoresizingMaskLayoutConstraints 你不明白的,参考 到 UIView 属性的文档 translatesAutoresizingMaskIntoConstraints) ( "", "", "")

将尝试通过打破约束来恢复

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点 在调试器中捕获它。中的方法 UIView 上的 UIConstraintBasedLayoutDebugging 类别列于 也可能有帮助。

事实上,我没有收到此消息,因为我没有在此对象上设置任何约束(我听说 Xcode 在构建时为自动布局 xib 中的每个视图默认设置它们)。

但不知何故,一切看起来都不错,而且似乎工作正常。

我可以忽略此消息还是以后会遇到问题?

【问题讨论】:

    标签: ios iphone autolayout


    【解决方案1】:

    您以后肯定会遇到问题并需要解决。如果您不满足所有约束并且运行时校正系统不能“捏造数字”,它可能会导致您的应用程序崩溃。你会收到像这样的讨厌的消息:

    Fatal Exception: NSInvalidArgumentException. Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something is nil

    为了解决自动布局问题,请遵循一些简单的步骤:

    1. 找到布局有问题的视图。在右上角的故事板对象左侧列表中,它们将有一个带有视图控制器名称的黄色或红色图标:


    (来源:apple.com

    1. 通过更改框架、约束或添加新约束来解决问题。每个问题本身都有解释,你可以在这里找到一个很好的教程:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ResolvingIssues/ResolvingIssues.html
    2. 解决所有问题后,请务必进行测试!在模拟器中测试您在 iPhone 4、5、6 和 6 Plus 尺寸下的视图,如果合适,还可以使用 iPad。此外,请务必在 iOS 7 和 8 下进行测试 - 一些自动布局约定在 iOS 8 中很好,但会导致 iOS 7 应用程序崩溃。 (通过艰难的方式了解到这一点......)

    就是这样!查找、修复、测试 :)

    【讨论】:

    • 感谢您的澄清。但实际上我并没有对视图进行任何约束……如果我这样做了,会不会出错?
    • 试图添加约束但实际上消息是一样的
    • 啊,自动调整掩码不需要在运行时转换为约束。尝试禁用它:'[view setTranslatesAutoresizingMaskIntoConstraints:NO];'
    【解决方案2】:

    恕我直言,例外是红鲱鱼。

    约束由苹果隐式管理。在某些时候,“那边”的几行代码会间接影响它们,因此很难发现为什么你的代码会在“那边”引发异常

    在我的情况下,我发现 [cell setHidden:YES] 继续执行并将该代码替换为 [cell removeFromSuperview] 并且问题消失了。

    .... OO 编程的租户之一是使 APIS 安全且易于使用。不易伤痕累累。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2014-10-27
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多