NSLayoutRelationConstraint 到视觉格式约束

NSLayoutRelationConstraint to Visual format constraint

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

这是我的代码:

[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、5s、6、6 Plus 等)动态管理和更改将很容易

您可以使用两种视觉格式字符串来做到这一点,一种是水平的,一种是垂直的:

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]| 使子项的边缘与父项的边缘匹配。这不仅决定了大小,尽管是间接的,但也决定了位置。