将视图的 CenterX 限制为父视图总宽度的一部分

Constraint the CenterX of a view to be fraction of overall width of superview

我想将子视图的中心限制在父视图总宽度的 1/6。

例如:

如果父视图的宽度 = 6

子视图的 CenterX = 1

我在superviewclass(self)中写了下面的代码来约束aSubview的centerX,结果崩溃了:

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

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

我有两个可能会崩溃的想法:

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

2) 1/6 应为 0,这不是有效的乘数。改用 1.0/6

更新:

方法名称是

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

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

更新 2:

看来终究是不允许的。我试图重现崩溃并记录以下错误:

Invalid pairing of layout attributes

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

这已经过测试并且可以工作:

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];

一定要将约束添加到要定位的视图的父视图中。

创建间隔视图。将其 hidden 设置为 YES。 (隐藏视图仍然参与布局。)将间隔器的前缘固定到父视图的前缘。将 spacer 的宽度限制为 superview 宽度的 1/6。

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