zou*_*oul 13 cocoa objective-c ios autolayout
我在视图中有一个视图:
+--------------+
| |
| +-----+|
| | ||
| +-----+|
+--------------+
Run Code Online (Sandbox Code Playgroud)
我希望内部视图始终在水平外视图的中间开始,并将整个剩余的一半跨越到右边缘:
innerView.frame.size.width = outerView.frame.size.width/2;
innerView.frame.origin.x = outerView.frame.size.width/2;
Run Code Online (Sandbox Code Playgroud)
如何使用自动布局表达?
Ada*_*uer 16
你实际上可以在IB/Storyboards中做到这一点,早在Xcode 5.1(可能更早)
显然,IB只允许将乘数设置为整数或比率,而不是浮点数.这是一个更清晰的屏幕截图

注意:如果翻转"First Item"和"Second Item",则比率为"2:1"
我不认为你可以在Interface Builder中做到这一点,但通过在代码中创建约束很容易做到这一点.
你的第一个等式正是我如何表达约束.第二个等式可能有效,但将原点与宽度相关联是很奇怪的.它们的数量不同.相反,只需将innerView的右侧固定在outerView的右侧即可.
我们使用属性NSLayoutAttributeTrailing代替NSLayoutAttributeRight,因此当本地化RTL时,您的界面将正确翻转.
// innerView.width = outerView.width * 0.5
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:innerView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:outerView
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:0];
// innerView.trailing = outerView.trailing
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:innerView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:outerView
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0];
[outerView addConstraints:@[widthConstraint, rightConstraint]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6141 次 |
| 最近记录: |