了解使用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个问题:

  1. 如何用代码手动设置垂直空间(30和-50)? 因为从故事板我没有看到任何不同的垂直空间的名称或ID。 他们都有相同的名字。 我必须创build2 NSLayoutConstraint
  2. 那么如何把它添加到_screenView? 我必须创build这个: [_screenView addConstraint: myConstraint]; 两次?
  3. 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多个。 我发现以上述方式写出来更加清楚。