iOS: 如何使用 constraintsWithVisualFormat 设置尾随边距?
iOS: How to set a trailing margin with constraintsWithVisualFormat?
我正在学习如何以编程方式使用 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 开始,在第二种情况下 (带有长标签),复选标记在视图之外。
我做错了什么?感谢您的帮助。
分析你的约束条件,你的约束条件已经有歧义了。
H:|-15-[icon(==35)]-9-[label]-9-[checkmark(==24)]-15-|
复选标记距右边距 15 像素,但它也距标签右侧 9 像素。如果图标、标签只占总宽度的 20%,在这种情况下,您的复选标记将占据从标签到距右边距 15 像素的其余 space。这将使复选标记增长。如果约束正确,UIImageView 可以使用内在的 contentSize。你解决这个问题的方法是有这样的不等式约束,
H:|-15-[icon(==35)]-9-[label]-(>=9)-[checkmark(==24)]-15-|
这意味着复选标记始终距离右侧 15 个像素,但标签和复选标记之间的 space 大于 9 个像素。因此,复选标记始终固定在距离右侧 15 个像素的位置,但标签和复选标记之间的 space 可以变化。
我正在学习如何以编程方式使用 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 开始,在第二种情况下 (带有长标签),复选标记在视图之外。
我做错了什么?感谢您的帮助。
分析你的约束条件,你的约束条件已经有歧义了。
H:|-15-[icon(==35)]-9-[label]-9-[checkmark(==24)]-15-|
复选标记距右边距 15 像素,但它也距标签右侧 9 像素。如果图标、标签只占总宽度的 20%,在这种情况下,您的复选标记将占据从标签到距右边距 15 像素的其余 space。这将使复选标记增长。如果约束正确,UIImageView 可以使用内在的 contentSize。你解决这个问题的方法是有这样的不等式约束,
H:|-15-[icon(==35)]-9-[label]-(>=9)-[checkmark(==24)]-15-|
这意味着复选标记始终距离右侧 15 个像素,但标签和复选标记之间的 space 大于 9 个像素。因此,复选标记始终固定在距离右侧 15 个像素的位置,但标签和复选标记之间的 space 可以变化。