父视图(绿色矩形)包含许多子视图。
让我们只考虑一个子视图,它具有水平位置,x偏移为0。
每当父视图的宽度发生变化时,请假设因子为a
,我需要将子视图定位为偏移量等于a * x
据我所知,NSLayoutConstraint
根据包含绿色视图宽度NSLayoutAttributeLeft
,不允许为红色子视图的属性NSLayoutAttributeWidth
设置约束。
欢迎任何建议/参考如何通过NSLayoutConstraint
描述如何实现比例定位。
答案 0 :(得分:2)
您将无法在Interface Builder中进行布局,但您可以在代码中使用超级视图上的NSLayoutAttributeLeft
。
通过这种方式,您可以给它一个倍数,以便在更新超级视图时保持位置正确。
如果这不起作用,您可以使用“spacer”视图。
所以你会把它们都放在这样的绿色超级视图中......
|[spacerView][redView] //using VFL
然后,您可以按照绿色视图的宽度设置间隔视图的宽度。
只需将spacerView
设置为隐藏或给它一个0.0的alpha值,这样它就不会显示。
答案 1 :(得分:1)
正如您所说,您无法将子视图的左侧属性与超级视图的宽度相关联,但您可以将其与NSLayoutAttributeRight相关联,与宽度具有相同的值。所以你应该能够通过使用乘数(和常数为0)来实现它,
[_greenView addConstraint:[NSLayoutConstraint constraintWithItem:_redView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:_greenView attribute:NSLayoutAttributeRight multiplier:.1 constant:0]];
当然,您需要根据绿色视图的宽度进行计算,以确定乘数应该是多少。所以,在我的例子中,greenView开始时宽200点,我希望红色视图从左边开始是20点,所以我使用0.1作为乘数。