gpt4 book ai didi

ios - "Unable to simultaneously satisfy constraints"当自动布局被禁用时

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:02:08 26 4
gpt4 key购买 nike

我在特定 View 的界面生成器中禁用了自动布局: Interface builder

但是当我为 xib 文件加载 ViewController 时,我在控制台中收到此错误:

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)

我在这个 View 中使用框架,当我在 Interface Builder 中禁用它时,我通常不会收到任何自动布局错误。这是似乎打破的约束:

(
"<NSLayoutConstraint:0x170f5cd0 V:[UIView:0x1709e560]-(0)-[UITableView:0x162e2200]>",
"<NSAutoresizingMaskLayoutConstraint:0x17185130 h=--& v=--& UIView:0x1709e560.midY == + 48>",
"<NSAutoresizingMaskLayoutConstraint:0x157e29a0 h=--& v=--& V:[UIView:0x1709e560(96)]>",
"<NSAutoresizingMaskLayoutConstraint:0x171c2670 h=--& v=--& TableHeaderView:0x1705d1c0.midY == + 72.5>",
"<NSAutoresizingMaskLayoutConstraint:0x171cb510 h=--& v=--& V:[TableHeaderView:0x1705d1c0(145)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1573fca0 h=-&- v=-&- UITableView:0x162e2200.midY == UIView:0x17505080.midY + 72.5>",
"<NSAutoresizingMaskLayoutConstraint:0x1573fcd0 h=-&- v=-&- UITableView:0x162e2200.height == UIView:0x17505080.height - 145>",
"<NSAutoresizingMaskLayoutConstraint:0x171e4450 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x17505080] (Names: '|':UIViewControllerWrapperView:0x17034d00 )>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x16c9ad30 V:[UIView:0x16cc2a00]-(0)-[UITableView:0x15249400]>

如果我错了请更正我,但我只是认为如果启用了自动布局我会收到此错误?

对我来说,它似乎认为我已经在 UIViewUITableView 之间设置了约束,但我没有! Interface Builder 中禁用了自动布局,我没有在代码中设置任何约束。

我已经尝试将 translatesAutoresizingMaskIntoConstraints 设置为 NO,但是当我这样做时我的框架没有受到尊重。

在我看来, View 正在使用自动布局。我已经尝试删除文件并重新构造它,但仍然出现相同的错误。

为什么在 xib 文件中禁用自动布局时我会收到此错误?

编辑:

原来是我在查找约束的时候弄错了。我在我的代码中找到了这一行:

NSDictionary* views = @{@"searchHeaderView": self.searchHeader.view, @"tableView": self.tableView};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchHeaderView]-(==0)-[tableView]" options:0 metrics:nil views:views]];

我认为这解释了 :-P

最佳答案

有些奇怪的事情正在发生,因为如果你仔细观察,'will break' 约束的内存地址和附加到它的 View 不在数组中,所以这些是不同的实例。

无论如何,不​​受欢迎的 Auto Layout 行为与您的怀疑是一致的:如果一个约束被添加到 View 层次结构中,AutoLayout 至少对于它的那一部分“重新打开”,并且您会得到一团困惑的 autoresizingmask 约束。

所以这是一个调试问题。您可以在调试器中使用的一些命令方法:

po [[UIWindow keyWindow] recursiveDescription]

为您提供 View 层次结构的完整轮廓,以及 UIView 描述,其中包括框架。

po [[UIWindow keyWindow] _autolayoutTrace]

这是私有(private) API,但这在开发过程中不是问题,尤其是在调试过程中。如果您遵循建议并在 UIViewAlertForUnsatisfiableConstraints(断点导航器,在底部)添加一个符号断点,这实际上效果最好。祝你好运。

关于ios - "Unable to simultaneously satisfy constraints"当自动布局被禁用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com