了解使用Xcode和手动编码的约束
我只是读了一些关于如何以编程方式操作约束数字的信息,但我想我需要用Xcode直观地看到它。 所以我决定把这样一个UIView,看看发生什么事与约束:
自动会创build4个约束:
在修改数字之后,我明白了这一切的意义。 我们有2个垂直空间和2个水平空间。 但让我们先关注垂直
从屏幕顶端测量的垂直空间之一(我猜),我给这个数字30.和从底部测量的其他垂直空间,我给-50。
现在,当它变成代码时,我真的不知道如何给这2个数字。 据我所知,这里是如何设置代码约束:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint constraintWithItem:_screenView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:_container attribute:NSLayoutAttributeHeight multiplier:20 constant:200]; [_screenView addConstraint: myConstraint];
让我们假设_screenView
是一个_screenView
视图, _container
是放在它上面的UIView。 我有3个问题:
- 如何用代码手动设置垂直空间(30和-50)? 因为从故事板我没有看到任何不同的垂直空间的名称或ID。 他们都有相同的名字。 我必须创build2
NSLayoutConstraint
? - 那么如何把它添加到_screenView? 我必须创build这个:
[_screenView addConstraint: myConstraint];
两次? -
multiplier
用于什么? 因为我在storyboard中看不到这个选项。
非常感谢你。
在使用约束时,我认为从Apple的“自动布局指南”中考虑这个公式非常重要:
y = m*x + b, where: y and x are attributes of views. m and b are floating point values.
你可以这样想:_container的顶部约束:
_containter.top = m*_screenView.top + b
当你使用NSLayoutConstraint constraintWithItem:...
创build一个约束时NSLayoutConstraint constraintWithItem:...
这个公式中的乘数参数是“m”和常量是“b”。 要创build一个约束,保持_container的顶部30点以下_screenView的顶部,你会这样做:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint constraintWithItem:_container attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_screenView attribute:NSLayoutAttributeTop multiplier:1.0 constant:30.0];
底部约束将是:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint constraintWithItem:_container attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_screenView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-50.0];
另外请记住,在UIKit坐标系中,X值从左到右上升,Y值从上到下上升。 换句话说,0,0位于屏幕的左上方,值从此处上升。
如果你想创build你在上面显示的四个限制,你将不得不单独创build它们。 您也可以使用NSLayoutConstraint的constraintsWithVisualFormat:options:metrics:views:
方法一次性创build多个。 我发现以上述方式写出来更加清楚。