【问题标题】:Warning for autolayout when view controller loads视图控制器加载时自动布局的警告
【发布时间】:2023-04-06 11:46:01
【问题描述】:

已尽力阅读其他一些帖子,但仍然难以理解为什么这会为我的自动布局发出警告,并希望有人能提供建议。我在 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 个约束。这是一个答案的链接,它将帮助您完成添加约束的过程。 stackoverflow.com/a/25775111/2507277
  • 谢谢,我最终阐明了我想要实现的目标,但认为它与原始帖子有所不同,因此发了一个新帖子:stackoverflow.com/questions/27174222/…

标签: ios ios8 autolayout xcode6


【解决方案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,但您应该能够在情节提要本身中解决您的问题,但我真的无能为力,因为我不使用它们。
  • 我实际上在这里发布的更清晰:stackoverflow.com/questions/27174222/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多