我有我的应用程序中的这个TabBarController,我已经在TabBar的顶部添加了一个UIView。我这样做是因为此视图显示了我想在每个视图中显示的持久数据。 我使用initWithFrame:
对此进行了初始化,它正是我想要的地方。iOS以编程方式添加约束导致错误
今天我注意到,当状态栏的高度增加时(在通话或个人热点期间),该视图向底部移动。我试图通过添加约束来修复:
[[self view] addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[_myView]-(44)-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(_myView)]];
这样一来,我期望MyView的总会从屏幕底部的44分间隔开,但是它不会发生。
调试器显示:
无法同时满足约束。
以下列表中的至少一个约束可能是您不想要的约束之一。试试这个:(1)看看每个约束,并试图找出你不期望的; (2)找到添加不需要的约束或约束并修复它的代码。 (注意:如果你看到
NSAutoresizingMaskLayoutConstraints
,你不明白,参考文档为UIView
财产translatesAutoresizingMaskIntoConstraints
)( "< NSLayoutConstraint:0x165c0280 V:[UIView:0x165bda30]-(44)-| (Names: '|':UIView:0x166dd460)>", "< NSAutoresizingMaskLayoutConstraint:0x165a7ce0 h=--& v=--& UIView:0x165bda30.midY == + 507>", "< NSAutoresizingMaskLayoutConstraint:0x165c50c0 h=--& v=--& V:[UIView:0x165bda30(34)]>", "< NSAutoresizingMaskLayoutConstraint:0x165c3a90 h=-&- v=-&- UIView:0x166dd460.height == UIWindow:0x1668f870.height - 20>", "< NSAutoresizingMaskLayoutConstraint:0x165a8070 h=--- v=--- V:[UIWindow:0x1668f870(568)]>" )
将尝试打破约束上objc_exception_throw
< NSLayoutConstraint:0x165c0280 V:[UIView:0x165bda30]-(44)-| (Names: '|':UIView:0x166dd460)>
歇赶追这在调试器中。 列出的UIView上的UIConstraintBasedLayoutDebugging类中的方法也可能有所帮助。
此错误仅在状态栏扩展时才会显示。没有其他限制以编程方式添加,并且此类的Interface Builder的VC为空。一切都以编程方式添加。
这让我疯狂!
我这样做了,但是这个视图根本不会显示。但是当你说“只有明确的限制”时,我才意识到,那么我也应该指定高度,宽度和原点。现在它按预期工作!谢谢。 – Guilherme