[英]Autolayout: Unable to simultaneously satisfy constraints
我正在尝试使用自动布局和以下代码在容器视图中堆叠多个视图:
UIView* prevView = commentBox; // Set the prev view to the container
for(Comment* comment in [[post info] comments]){
UIView* commentView = [[UIView alloc] initWithFrame:CGRectZero];
[commentView setTranslatesAutoresizingMaskIntoConstraints:NO];
[commentBox addSubview:commentView];
// Vertically align with container view
[commentBox addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[commentView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(commentView)]];
// Add a space of 8 between the previous view and the current view
[commentBox addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[prevView]-8-[commentView(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(prevView, commentView)]];
// Store the current view for the next round
prevView = commentView;
}
// Finally, add a space between the last element and the container view
[commentBox addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[prevView]-8-[commentBox]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(prevView, commentBox)]];
commentBox
本身是自动放置在情节提要中的,这应该是安全的。
但是,当commentBox充满子视图时,它将显示以下错误:
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:0x170097ca0 H:|-(0)-[UIView:0x170199e60] (Names: '|':UIView:0x17019a8f0 )>",
"<NSLayoutConstraint:0x170097cf0 H:[UIView:0x170199e60]-(0)-| (Names: '|':UIView:0x17019a8f0 )>",
"<NSLayoutConstraint:0x174099280 UIView:0x17419c8a0.width == UIView:0x17019a8f0.width>",
"<NSLayoutConstraint:0x17409a180 'UIView-Encapsulated-Layout-Width' H:[UIView:0x17419c8a0(320)]>",
"<NSLayoutConstraint:0x170098ec0 H:[UIView:0x170199e60]-(8)-[UIView:0x1701997e0]>",
"<NSLayoutConstraint:0x170098f10 H:[UIView:0x1701997e0(100)]>",
"<NSLayoutConstraint:0x170099050 H:[UIView:0x1701997e0]-(8)-[UIView:0x170199a50]>",
"<NSLayoutConstraint:0x1700990a0 H:[UIView:0x170199a50(100)]>",
"<NSLayoutConstraint:0x170099190 H:[UIView:0x170199a50]-(8)-[UIView:0x17019b110]>",
"<NSLayoutConstraint:0x1700991e0 H:[UIView:0x17019b110(100)]>",
"<NSLayoutConstraint:0x174099dc0 H:[UIView:0x17019b110]-(8)-[UIView:0x170199e60]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x174099dc0 H:[UIView:0x17019b110]-(8)-[UIView:0x170199e60]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
我不知道如何解决这个问题。
我将xCode 6.1与iOS SDK 8.1一起使用
先感谢您
我发现您的代码中有两件事是错误的。 首先,您不能在第一个水平约束或最后一个约束的[commentBox]中引用带有[prevView]的超级视图。 您需要使用竖线字符“ |”来引用它。 其次,您不能对整个视图进行严格的约束(即我的意思是具有固定值的大小和空间)(除非这些数字完全正好等于超级视图的宽度,即使如此,您也不应这样做)它)。 因此,您要么需要允许宽度或间距灵活,要么不要将最后一个约束置于commentView的右侧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.