Autolayout - 调整与超级视图成比例的子视图

时间:2014-09-08 21:43:44

标签: uiimageview autolayout constraints aspect-ratio

我有一个带有两个垂直约束的视图,一个1:1的宽高比costraint和一个中心对齐,因此它会根据屏幕的高度自动调整大小。 现在,这个视图充满了UIImageViews形式的一堆较小的子视图。我希望这些图像视图能够自动调整大小与超视图成比例,但无法弄清楚如何做到这一点。我在superview中尝试了无数版本的约束,但所有这些约束都以混乱结束。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

以下是1 UIImageView:

的示例

首先在superview中设置imageView的位置(为简单起见,我选择了左上角):

NSDictionary* views = NSDictionaryOfVariableBindings(orangeView);

[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]"
                                                                 options:0
                                                                 metrics:nil
                                                                   views:views]];
[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]"
                                                                options:0
                                                                metrics:nil
                                                                  views:views]];

之后将imageView的宽度和高度设置为相对于其超级视图:

[superview addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                      attribute:NSLayoutAttributeHeight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:redView
                                                      attribute:NSLayoutAttributeHeight
                                                     multiplier:0.4//between 0.0 and 1.0
                                                       constant:0]];

[superview addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                    attribute:NSLayoutAttributeWidth
                                                    relatedBy:NSLayoutRelationEqual
                                                       toItem:redView
                                                    attribute:NSLayoutAttributeWidth
                                                   multiplier:0.4//between 0.0 and 1.0
                                                     constant:0]];