我正在学习如何以编程方式使用NSLayoutConstraints
,主要是constraintsWithVisualFormat
,为此我尝试使用此布局重新创建视图:
此视图由三个子视图组成,一个35x35px圆圈图标,距离视图左侧15px,一个复选标记图标,距离视图右侧15px,中间标签,9px远从圆圈图标和复选标记。
我试过了:
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[icon(==35)]-9-[label]-9-[checkmark(==24)]-15-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(icon, label, checkmark)]];
图标位于正确的位置,标签也会从它开始的位置开始,但是我无法将复选标记放在我想要的位置......它实际上是在标签右边9px处开始,在第二种情况下(带有长标签),复选标记位于视图之外。
我做错了什么?谢谢你的帮助。
答案 0 :(得分:1)
分析你的约束,你的约束已经有歧义。
H:|-15-[icon(==35)]-9-[label]-9-[checkmark(==24)]-15-|
复选标记距离右边距15像素,但是标记右边也是9像素。如果图标,标签仅占总宽度的20%,那么您的复选标记将占据标签的剩余空间,距离右边距15像素。这将使复选标记成长。如果约束是正确的,UIImageView可以使用内在的contentSize。你解决这个问题的方法就是像这样有不等式约束,
H:|-15-[icon(==35)]-9-[label]-(>=9)-[checkmark(==24)]-15-|
现在这意味着复选标记总是从右边15像素,但标签和复选标记之间的间距大于9像素。因此,复选标记始终固定在距离右侧15个像素处,但标签和复选标记之间的间距可能会有所不同。