首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSLayoutConstraint按比例定位

NSLayoutConstraint按比例定位
EN

Stack Overflow用户
提问于 2014-07-29 20:29:50
回答 2查看 761关注 0票数 2

父视图(绿色矩形)包含许多子视图。

让我们只考虑一个子视图,它有一个水平位置,x偏移量为0。

每当父视图的宽度改变时,假设偏移量为a,我需要将子视图定位为偏移量等于a * x

据我所知,NSLayoutConstraint不允许基于包含绿色视图宽度NSLayoutAttributeWidth的红色子视图的属性NSLayoutAttributeLeft设置约束。

欢迎任何建议/参考如何达到NSLayoutConstraint所描述的比例定位。

EN

回答 2

Stack Overflow用户

发布于 2014-07-29 20:40:12

您不能在Interface Builder中对其进行布局,但您可以在代码中使用超级视图中的NSLayoutAttributeLeft

这样,你可以给它一个倍数,这样当superview更新时,它将保持正确的位置。

如果这不起作用,你可以使用“间隔”视图。

所以你会在绿色的superview中看到它们,就像这样...

代码语言:javascript
复制
|[spacerView][redView] //using VFL

然后,可以将间隔视图的宽度按比例设置为绿色视图的宽度。

只要将spacerView设置为隐藏,或者将alpha设置为0.0,它就不会显示。

票数 2
EN

Stack Overflow用户

发布于 2014-07-30 12:54:57

正如您所说的,您不能将子视图的left属性与superview的宽度相关联,但您可以将其与NSLayoutAttributeRight相关联,它具有与宽度相同的值。因此,您应该能够使用乘数(常数为0)来完成此操作,

代码语言:javascript
复制
[_greenView addConstraint:[NSLayoutConstraint constraintWithItem:_redView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:_greenView attribute:NSLayoutAttributeRight multiplier:.1 constant:0]];

当然,您需要根据绿色视图的宽度进行计算,以确定乘数应该是多少。因此,在我的示例中,greenView最初的宽度为200点,而我希望红色视图从左侧开始为20点,因此我使用0.1作为乘数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25015351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档