我可以忽略“无法同时满足约束条件”吗?

问题描述:

我正在更新现有应用程序以自动布局以支持更多设备大小。我有需要和动画,而不是与约束工作,我将它们设置为几个对象:我可以忽略“无法同时满足约束条件”吗?

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每个视图)。

但不知何故,一切看起来不错,似乎工作。

我可以忽略此消息吗?或者稍后我会遇到问题吗?

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

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

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

  1. 查找违例的布局视图。他们将通过视图控制器的名字黄色或红色的图标在右上故事板物体的左侧列表:

the yellow icon is your guide...

  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应用程序崩溃。 (了解到硬道路......)
  3. 就是这样!查找,修复,测试:)

开始=“2”>
+0

谢谢澄清。但实际上我并没有对这个观点给予任何限制......如果我这样做,会不会有错误? – arnoapp 2014-10-07 18:24:45

+0

试图添加约束但实际上消息是相同的 – arnoapp 2014-10-07 18:31:27

+0

啊,自动调整掩码不需要在运行时转换为约束。尝试禁用它:'[view setTranslatesAutoresizingMaskIntoConstraints:NO];'' – 2014-10-08 01:25:46

恕我直言,例外是一个红色的鲱鱼。

约束由苹果隐式管理。在某些时候,'那里'的几行代码可以间接影响它们,因此很难发现为什么你的代码在这里提出异常'

在我的情况下,我发现[cell setHidden:YES]继续前进,并用[cell removeFromSuperview]替换了该代码,问题就消失了。

....面向对象编程的租户之一是使APIS安全和易于使用。不容易擦伤和困惑。