0

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

这是我的代码:

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

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

4

2 回答 2

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

严格来说,这与您显示的约束相匹配。它使子级与父级具有相同的大小,但不规定子级在父级中的位置。

正如安东尼斯在评论中建议的那样,您可以以不同的方式处理这个问题。您可以使用H:|[childView]|andV:|[childView]|使子项的边缘与父项的边缘匹配。这不仅决定了大小,虽然是间接的,但也决定了位置。

于 2015-07-29T04:20:47.483 回答
0

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

根据不同的屏幕尺寸(4、5s、6、6 Plus 等),可以轻松管理和动态更改

于 2015-07-28T23:03:17.750 回答