NSLayoutRelationConstraint到Visual格式约束

时间:2015-07-28 21:39:21

标签: ios objective-c nslayoutconstraint visual-format-language

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

这是我的代码:

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用两个可视格式字符串执行此操作,一个是水平字符串,一个是垂直字符串:

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]|使子项的边缘与父项的边缘匹配。这不仅决定了规模的大小,也决定了它的位置。

答案 1 :(得分:0)

I would recommend adding constraint to stroyboard, create outlet in view controller and update constant when required.

It'll be easy to manage and change dynamically based on different screen sizes (4, 5s, 6, 6 Plus etc)