iOS AutoLayout约束

mar*_*aie 0 ios autolayout

我是autolayout的新手.有人可以解释为什么这不起作用?MAFeedbackCell是两个标签的容器.有在容器等标签,但是这两个:0xaa3aca00x14395240是有冲突的.

2014-09-28 08:38:26.056 beats[1052:60b] 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:0xaa3aea0 UILabel:0xaa3aca0.width <= 0.125*MAFeedbackCell:0x14394d90.width>",
    "<NSLayoutConstraint:0xa657130 H:|-(1)-[UILabel:0xaa3aca0](LTR)   (Names: '|':MAFeedbackCell:0x14394d90 )>",
    "<NSLayoutConstraint:0x143955c0 H:[UILabel:0xaa3aca0]-(1)-[UILabel:0x14395240](LTR)>",
    "<NSLayoutConstraint:0x143959c0 UILabel:0x14395240.width == UILabel:0xaa3aca0.width>",
    "<NSLayoutConstraint:0xa558fc0 UILabel:0x14395240.right == MAFeedbackCell:0x14394d90.right - 1>",
    "<NSLayoutConstraint:0xa541660 'UIView-Encapsulated-Layout-Width' H:[MAFeedbackCell:0x14394d90(231)]>"
Run Code Online (Sandbox Code Playgroud)

)

rob*_*off 5

你有MAFeedbackCellsuperview和两个UILabel子视图.

左边标签(0xaa3aca0)被限制为不超过superview的八分之一宽:

UILabel:0xaa3aca0.width <= 0.125*MAFeedbackCell:0x14394d90.width
Run Code Online (Sandbox Code Playgroud)

(注意0.125 = 1/8.)

左标签(0xaa3aca0)和右标签(0x14395240)被约束为具有彼此相同的宽度:

UILabel:0x14395240.width == UILabel:0xaa3aca0.width
Run Code Online (Sandbox Code Playgroud)

因此,正确的视图也必须不超过superview的八分之一.

左侧标签的左边缘被限制为超视图左边缘内的一个点:

H:|-(1)-[UILabel:0xaa3aca0](LTR)   (Names: '|':MAFeedbackCell:0x14394d90 )
Run Code Online (Sandbox Code Playgroud)

右侧标签的右边缘被限制为超视图右边缘内的一个点:

UILabel:0x14395240.right == MAFeedbackCell:0x14394d90.right - 1
Run Code Online (Sandbox Code Playgroud)

两个标签被约束为由一个点分隔:

H:[UILabel:0xaa3aca0]-(1)-[UILabel:0x14395240](LTR)
Run Code Online (Sandbox Code Playgroud)

所以我们假设L是每个标签的宽度,M是superview的宽度.

这些约束要求1 + L + 1 + L + 1 == M,并且L <= M/8.

将第一个等式简化为3 + 2*L == M并替换为第二个等式:L <=(3 + 2*L)/ 8.将其简化为L <= 1/2.所以我们可以满足所有这些约束......如果每个标签不超过半个点宽.这将要求超级视图不超过四个点.

不幸的是,超级视图被限制为231分宽:

 H:[MAFeedbackCell:0x14394d90(231)]
Run Code Online (Sandbox Code Playgroud)

因此,你的约束是不可满足的.