将视图的 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。
然后将“居中”视图的中心约束到间隔视图的后缘。
我想将子视图的中心限制在父视图总宽度的 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。
然后将“居中”视图的中心约束到间隔视图的后缘。