将视图的CenterX约束为superview的总宽度的一部分

时间:2015-07-13 16:55:39

标签: ios autolayout nslayoutconstraint

我想将子视图的中心约束为超视图总宽度的1/6。

例如:

如果superview的宽度= 6

subview的CenterX = 1

我在superview类(self)中编写了以下代码,以约束aSubview的centerX,它崩溃了:

// Hits here 
[NSLayoutConstraint constraintWithItem:self.aSubview
                             attribute:NSLayoutAttributeCenterX
                                toItem:self
                             attribute:NSLayoutAttributeWidth
                            multiplier:1/6
                              constant:0];
// Crashes here

有没有办法用NSLayoutConstraints做到这一点?

2 个答案:

答案 0 :(得分:2)

我有两个想法,为什么这可能会崩溃:

1)在这种情况下,自我是什么?你确定它是UIView的子类吗?

2)1/6应该导致0,这不是有效的乘数。尝试使用1.0 / 6

<强>更新

方法名称是

+ constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:

您的代码中的 relatedBy:部分在哪里?

更新2:

似乎不允许这样做。我试图重现崩溃并记录以下错误:

  

布局属性配对无效

但是!你可以使用Trailing而不是Width来实现所需的布局,如果superview的左侧连接到屏幕,它实际上保持相同的值(参见图像以便更好地理解)。

enter image description here

这是经过测试和运作的:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.aView
                                                              attribute:NSLayoutAttributeCenterX
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeTrailing
                                                             multiplier:1.0/2 
                                                               constant:0];

[self.view addConstraint:constraint];

请务必将约束添加到要定位的视图的超级视图中。

答案 1 :(得分:1)

创建间隔视图。将其# Bicubic interpolation library(akima) interp_bicubic <- bicubic.grid(X, Y, Z, xlim = c(-2, 0), ylim = c(-2, 0), dx = 2 / (200 - 1), dy = 2 / (200 - 1)) image(interp_bicubic) 设置为hidden。 (隐藏的视图仍然参与布局。)将垫片的前缘固定到superview的前缘。将垫片的宽度限制为超视图宽度的1/6。

然后将“居中”视图的中心约束到间隔视图的后缘。