约束目标 c
Posted
技术标签:
【中文标题】约束目标 c【英文标题】:Constraints objective c 【发布时间】:2016-05-30 13:15:54 【问题描述】:什么意思
无法同时满足约束。可能以下列表中的至少一个约束是您不想要的。
试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。
(
"<NSLayoutConstraint:0x7f871d1303b0 H: [UIButton:0x7f871d197640(30)]>",
"<NSLayoutConstraint:0x7f871d1a1c40 H:[UIButton:0x7f871d196960'LB'(30)]>",
"<NSLayoutConstraint:0x7f871d1a4570 H:[UIView:0x7f871d196d60]-(100.8)-| (Names: '|':UIView:0x7f871ac66870 )>",
"<NSLayoutConstraint:0x7f871d1a5200 H:|-(0)-[UIView:0x7f871d196d60] (Names: '|':UIView:0x7f871ac66870 )>",
"<NSLayoutConstraint:0x7f871d19c5f0 H:[UIView:0x7f871ac66870]-(0)-| (Names: '|':UIView:0x7f871d199d70 )>",
"<NSLayoutConstraint:0x7f871d19c640 H:|-(20)-[UIView:0x7f871ac66870] (Names: '|':UIView:0x7f871d199d70 )>",
"<NSLayoutConstraint:0x7f871d1a8ca0 H:|-(0)-[UIView:0x7f871d199d70] (Names: '|':UIView:0x7f871d199c00 )>",
"<NSLayoutConstraint:0x7f871d1a8d40 UIView:0x7f871d19c820.width == UIView:0x7f871d199d70.width>",
"<NSLayoutConstraint:0x7f871d1a8de0 H:[UIView:0x7f871d199d70]-(10)-[UIView:0x7f871d19c820]>",
"<NSLayoutConstraint:0x7f871d1a8e80 H:[UIView:0x7f871d19c820]-(10)-[UIView:0x7f871d1a7000]>",
"<NSLayoutConstraint:0x7f871d1a8f20 UIView:0x7f871d1a7000.width == UIView:0x7f871d199d70.width>",
"<NSLayoutConstraint:0x7f871d1a8f70 H:[UIView:0x7f871d1a7000]-(0)-| (Names: '|':UIView:0x7f871d199c00 )>",
"<NSLayoutConstraint:0x7f871d1a9450 H:|-(15)-[UIButton:0x7f871d197640] (Names: '|':UIView:0x7f871d19b130 )>",
"<NSLayoutConstraint:0x7f871d1a9540 H:[UIButton:0x7f871d197640]-(10)-[UIView:0x7f871d199c00]>",
"<NSLayoutConstraint:0x7f871d1a95e0 H:[UIView:0x7f871d199c00]-(10)-[UIButton:0x7f871d196960'LB']>",
"<NSLayoutConstraint:0x7f871d1a96d0 H:[UIButton:0x7f871d196960'LB']-(10)-| (Names: '|':UIView:0x7f871d19b130 )>",
"<NSLayoutConstraint:0x7f871d1aa340 H:[UIView:0x7f871d19b130]-(0)-| (Names: '|':UIView:0x7f871d19afc0 )>",
"<NSLayoutConstraint:0x7f871d1aa390 H:|-(0)-[UIView:0x7f871d19b130] (Names: '|':UIView:0x7f871d19afc0 )>",
"<NSLayoutConstraint:0x7f871d1b7230 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7f871d19afc0(320)]>"
)
Will attempt to recover by breaking constraint
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.
【问题讨论】:
这意味着您在视图中添加了不必要的约束。它可以是您添加的多个不需要的约束。 实际上它的意思正是它所说的。 ;-) 在最后一行 break constraint 下面有一个将被忽略的约束。 这并不一定意味着你添加了约束,但是在你添加的约束和系统为你添加的约束之间,它们不能一起工作.约束定义了一个方程组,该方程组在运行时求解以定位视图。当系统没有解决方案时,您会收到该错误。 有 很多 主题与Unable to simultaneously satisfy constraints.
相关,而这些主题又与自动布局相关。 this 和 this 以及更多其他人。
【参考方案1】:
这意味着您提供了比要求更多的约束,因此会产生歧义。
例如,如果您有一个标签的高度为30
。
现在你给出top,leading and trailing with constant of 20
和fixed height of 30
之类的约束。这意味着您的标签始终从顶部、左侧和右侧保持每侧 20 的空间,并始终保持 30 的高度。
没关系。
现在,如果您添加另一个约束,例如 fixed width with constant 50
,这意味着标签的宽度应该是 50。
现在如果您的应用在 4 英寸设备上运行,那么您的屏幕宽度为 320。
因此,如果标签保持宽度为 50 则不能保持左右间距为 20,如果它保持间距为 20 则不能保持宽度。
这种情况称为歧义。
这是一个理解的例子。
您的约束在某处造成了这种歧义,因此请检查两次并删除不必要的或额外的约束。
希望这会有所帮助:)
【讨论】:
【参考方案2】:可能,UIView:0x7f871d199d70 的约束有问题:正如我所见,您和/或 XCode 添加了偏移量和宽度。
【讨论】:
以上是关于约束目标 c的主要内容,如果未能解决你的问题,请参考以下文章