Autolayout - 按百分比排名

Ber*_*rnd 33 objective-c uiview ios autolayout

我想沿着一条线绘制点.

穿过屏幕

线长取决于设备和方向,并始终在整个屏幕上拉伸.因此,使用相对百分比值来定位点是最有意义的.

到目前为止,我只发现约束在某种点值(Doc)中被定义

是否可以使用百分比值作为约束?关于如何以可扩展的方式定位这些点的任何想法......或者我是否需要"手动"进行这种转换/定位?

rde*_*mar 46

是的,您可以将点定位为视图宽度的一部分.NSLayoutConstraint方法constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:,具有乘数参数,允许您使用superview及其子视图之间的小数关系.superview的右边缘将是该视图的宽度(如果是全宽视图,则为屏幕),因此如果您创建如下所示的约束,则点将沿着该线定位在小数距离处:

-(void)viewDidLoad {
      [super viewDidLoad];
      [self.view removeConstraint:self.leftConDark];
      [self.view removeConstraint:self.leftConLight];
      NSLayoutConstraint *lcd = [NSLayoutConstraint constraintWithItem:self.darkButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.5 
                                                              constant:0];
      NSLayoutConstraint *lcl = [NSLayoutConstraint constraintWithItem:self.lightButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.9 
                                                              constant:0];
      [self.view addConstraints:@[lcd,lcl]];
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我定位了两个UIButton(信息类型暗和亮).我在IB中添加了它们,并将IBOutlets设置为它们对视图左侧的约束(这就是系统给我的,它本来可以到右侧 - 因为你只是删除了它们并不重要如果你在代码中制作点,你就不需要这样做了.在代码中我删除了那些约束,然后添加新的约束,将按钮的中心放在屏幕的50%和90%处.

  • +1我同意使用`multiplier`和`NSLayoutAttributeRight`(尽管我可能会将`NSLayoutAttributeCenterX`改为`NSLayoutAttributeRight`,但Bernd无疑会得到这个想法).精彩. (3认同)
  • @Isuru,是的,你现在可以在IB中做到这一点(我不确定在我写这个答案的时候有可能).在视图的centerX和superview的尾随之间建立约束.编辑约束,并为其提供一个乘数,该乘数是屏幕上您希望放置视图的任何部分.将常量设置为0. (3认同)

Gre*_*ell 12

我不是自动布局专家(甚至还不称职!)但是从XCode 6开始,你似乎能够在IB中做到这一点.

  1. 选择对象.
  2. 显示尺寸检查器(单击标尺) 尺寸检查员

  3. 双击约束矩形(不明显!"编辑"将你带到其他地方)

约束矩形

  1. 在这里你可以像上面的答案一样设置乘数.

在此输入图像描述