视图控制器加载时自动布局的警告

Posted

技术标签:

【中文标题】视图控制器加载时自动布局的警告【英文标题】:Warning for autolayout when view controller loads 【发布时间】:2014-11-27 14:46:36 【问题描述】:

已尽力阅读其他一些帖子,但仍然难以理解为什么这会为我的自动布局发出警告,并希望有人能提供建议。我在 xcode6 中。

问题 #1 - 对于自动布局约束,这些警告/崩溃通常可以吗?或者这是一件非常严重的事情,我应该尽最大努力解决?

问题 #2 - 这是输出。我觉得这与我在视图控制器中设置项目的纵横比有关(我有 3 个视图作为矩形,我希望它们分别是高度的 15%、60%、25% 和完全相等的宽度)。我认为告诉它保持纵横比是处理这个问题的正确方法?

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f8a66031bc0 V:[UITableView:0x7f8a65837c00(73)]>",
    "<NSLayoutConstraint:0x7f8a6605c150 UITableView:0x7f8a65837c00.width == 7.78082*UITableView:0x7f8a65837c00.height>",
    "<NSLayoutConstraint:0x7f8a6604e970 UICollectionView:0x7f8a65838400.leading == UIView:0x7f8a66031eb0.leadingMargin>",
    "<NSLayoutConstraint:0x7f8a6604e9c0 UICollectionView:0x7f8a65838400.trailing == UIView:0x7f8a66031eb0.trailingMargin>",
    "<NSLayoutConstraint:0x7f8a6604ea10 UICollectionView:0x7f8a65838400.width == UITableView:0x7f8a65837c00.width>",
    "<NSLayoutConstraint:0x7f8a63c4ccf0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7f8a66031eb0(320)]>"
)

非常感谢您的帮助!

【问题讨论】:

警告应该可以运行和测试,尽管像@hodson 建议它推迟不可避免的,最终你会想要对它们进行排序。我建议选择情节提要上的所有对象并清除约束,然后将它们一一添加,其中每个对象至少需要 4 个约束。这是一个答案的链接,它将帮助您完成添加约束的过程。 ***.com/a/25775111/2507277 谢谢,我最终阐明了我想要实现的目标,但认为它与原始帖子有所不同,因此发了一个新帖子:***.com/questions/27174222/… 【参考方案1】:
[[NSUserDefaults standardUserDefaults] setValue:@(NO) forKey:@"_UIConstraintBasedLayoutLogUnsatisfiable"];

此控制台警告不会产生任何问题。 在 appdelegate 中添加此代码。这将从控制台隐藏约束错误消息

【讨论】:

不错的解决方案,这正是我需要的。我使用 systemLayoutSizeFitting 方法计算集合视图的高度。但它总是输出自动布局警告。在这种情况下这没问题,但我不希望我的控制台被污染。【参考方案2】:

1) 我建议您解决问题,而不是将其留在原处。如果您已经测试了应用程序并且看起来像您想要的那样,您可能可以将它们留在那里,但您只是推迟了不可避免的事情。

2) 查看您的约束代码会更容易看出您哪里出错了。您想要做的是将乘数设置为以下值:

矩形 1:15.0f/100.0f 矩形 2:60.0f/100.0f 矩形 3:25.0f/100.0f

【讨论】:

感谢您的帮助 - 当您说代码时,您是什么意思?我没有在代码中做任何事情,而只是在故事板上。有没有办法将它们导出到代码中?谢谢:) 抱歉,我没有意识到您正在使用情节提要。我在 Objective-C 代码中输入了我所有的观点。如果您真的想将情节提要转换为代码,您可以使用nib2objc,但您应该能够在情节提要本身中解决您的问题,但我真的无能为力,因为我不使用它们。 我实际上在这里发布的更清晰:***.com/questions/27174222/…

以上是关于视图控制器加载时自动布局的警告的主要内容,如果未能解决你的问题,请参考以下文章

自动布局约束警告

自动布局中的错位视图警告

自动布局 - 视图控制器框架不正确

当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器

使用自动布局的 IB_DESIGNABLE 自定义视图的错位视图警告和奇怪行为

自动布局约束在运行时消失