Ios 带有constraintWithItem与带有VisualFormat的Constraints的自动布局问题
我有一个非常简单的UI,可以很好地使用constraintsWithVisualFormat,我尝试用constraintWithItem替换它,但由于某种原因它不起作用。我不知道这里怎么了 我理解的字面意思是 在垂直方向上,contentView应该填充其视图的整个高度 没有填充的superviewIos 带有constraintWithItem与带有VisualFormat的Constraints的自动布局问题,ios,objective-c,cocoa-touch,autolayout,Ios,Objective C,Cocoa Touch,Autolayout,我有一个非常简单的UI,可以很好地使用constraintsWithVisualFormat,我尝试用constraintWithItem替换它,但由于某种原因它不起作用。我不知道这里怎么了 我理解的字面意思是 在垂直方向上,contentView应该填充其视图的整个高度 没有填充的superview 新代码指定高度,但不指定位置。视觉格式规范没有说明项目的高度,而是将视图的上边缘和下边缘相互固定 不要为高度创建约束,而是创建两个约束,一个为上边距,一个为下边距,将contentView的边缘固
新代码指定高度,但不指定位置。视觉格式规范没有说明项目的高度,而是将视图的上边缘和下边缘相互固定
不要为高度创建约束,而是创建两个约束,一个为上边距,一个为下边距,将contentView的边缘固定到containerView。您应该将其从高度更改为顶部。并在底部添加类似的约束
NSLayoutConstraint *constraints =
[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0];
[containerView addConstraint:constraints];
此视觉格式:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|"
options:0
metrics:nil
views:viewsDictionary];
[containerView addConstraints:constraints];
应替换为两个约束条件:
NSLayoutConstraint *topConstraint =
[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0];
[containerView addConstraint: topConstraint];
和
NSLayoutConstraint *bottomConstraint =
[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0];
[containerView addConstraint:bottomConstraint];
我还有一个水平约束H:|[contentView]|,这意味着我也需要左和右?我想我在翻译vFly时遇到了问题,水平视图也是如此。所以真正的问题可能是V:|[contentView]|和H:|[contentView]|
V:|[contentView]|
的直译是什么意思是“将contentView捕捉到超级视图的顶部和底部”H:|[contentView]|
的意思是“将contentView捕捉到其superview的前导和尾随。如果将“NSLayoutFormatDirectionLeftToRight”设置为选项,则前导和尾随将被左右替换。@AtifImran如果您确实想知道视觉格式是如何转换的,可以在约束数组上迭代。此数组包含NSLayoutConstraint对象,然后可以打印出其debugDescription。
NSLayoutConstraint *bottomConstraint =
[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0];
[containerView addConstraint:bottomConstraint];