Ios NSLayoutRelationConstraint到可视格式约束

Ios NSLayoutRelationConstraint到可视格式约束,ios,objective-c,nslayoutconstraint,visual-format-language,Ios,Objective C,Nslayoutconstraint,Visual Format Language,我正在尝试将关系约束转换为可视格式。子视图的宽度和高度与超级视图相同 这是我的密码: [parentView addConstraint:[NSLayoutConstraint constraintWithItem:childView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:p

我正在尝试将关系约束转换为可视格式。子视图的宽度和高度与超级视图相同

这是我的密码:

[parentView addConstraint:[NSLayoutConstraint
       constraintWithItem:childView
                attribute:NSLayoutAttributeHeight
                relatedBy:NSLayoutRelationEqual
                   toItem:parentView
                attribute:NSLayoutAttributeHeight
               multiplier:1.0
                 constant:0]];

[parentView addConstraint:[NSLayoutConstraint
       constraintWithItem:childView
                attribute:NSLayoutAttributeWidth
                relatedBy:NSLayoutRelationEqual
                   toItem:parentView
                attribute:NSLayoutAttributeWidth
               multiplier:1.0
                 constant:0]];

如何将其转换为可视格式?

我建议在stroyboard中添加约束,在视图控制器中创建插座,并在需要时更新常量


根据不同的屏幕大小(4、5、6、6等)动态管理和更改将非常容易。

您可以使用两个可视格式字符串,一个水平,一个垂直:

NSDictionary* views = NSDictionaryOfVariableBindings(parentView, childView);
NSArray* horzConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[childView(==parentView)]" options:0 metrics:nil views:views];
NSArray* vertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[childView(==parentView)]" options:0 metrics:nil views:views];
严格地说,这符合您所展示的约束条件。它使子对象具有与父对象相同的大小,但不指定子对象在父对象中的位置


正如Antonis在评论中所建议的,你可以用不同的方式来处理这个问题。您可以使用
H:|[childView]|
V:|[childView]|
使子对象的边与父对象的边匹配。这不仅决定了大小,虽然是间接的,但也决定了位置。

问题是如何通过视觉格式来做到这一点,而不是问它是否有更好的方法来完成这一点。提示
@“H:|[childView]|”
@“V:|[childView]|”