如何将子视图的宽度相对固定?

时间:2014-12-08 15:57:14

标签: objective-c xcode

我有一个带两个子视图的视图控制器。

我想将两个子视图固定为相同的相对宽度。

像这样:

explanation

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要将子视图固定到顶部,左侧,右侧。同时设置相等的宽度属性。

你应该看看this tutorial,有一个等宽容器的好例子。  enter image description here

答案 1 :(得分:1)

这是一个用代码做同样事情的简单版本,

@interface ViewController ()

@property (nonatomic, weak) UIView *view1;
@property (nonatomic, weak) UIView *view2;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self prepareView];
    [self setupConstraints];
}

- (void)prepareView
{
    UIView *view1 = [self createView];
    UIView *view2 = [self createView];

    [self.view addSubview:view1];
    [self.view addSubview:view2];

    self.view1 = view1;
    self.view2 = view2;
}

- (void)setupConstraints
{
    NSDictionary *views = @{
                            @"view1": self.view1,
                            @"view2": self.view2
                            };

    NSString *horizontalFormat = @"H:|[view1][view2(==view1)]|";
    NSString *verticalFormat = @"V:|[view1]|";

    NSArray *horizontalConstraints;
    NSArray *verticalConstraints;

    horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:horizontalFormat
                                                                             options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom
                                                                             metrics:nil
                                                                               views:views];
    verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:verticalFormat
                                                                           options:0
                                                                           metrics:nil
                                                                             views:views];

    [self.view addConstraints:horizontalConstraints];
    [self.view addConstraints:verticalConstraints];
}

- (UIView *)createView
{
    UIView *view = [[UIView alloc ] initWithFrame:CGRectZero];
    view.translatesAutoresizingMaskIntoConstraints = NO;
    view.backgroundColor = [self randomColor];
    return view;

}

- (UIColor *)randomColor
{
    float red = arc4random_uniform(255) / 255.0;
    float green = arc4random_uniform(255) / 255.0;
    float blue = arc4random_uniform(255) / 255.0;
    return [UIColor colorWithRed:red
                           green:green
                            blue:blue
                           alpha:1.0];
}

@end

horizo​​ntalConstraint的选项将视图顶部底部固定,而格式字符串也表示两个视图具有相同的宽度即可。我们将第一个视图固定到左边缘,第二个视图固定到右边缘,两个都相等,还有顶部底部被钉住了。现在,我们需要告诉视图其中一个被固定到superView 上边缘和superView 下边缘,其中 verticalFormat 描述。现在,我们有相等宽度的视图,其顶部固定在 superView的顶部底部固定在superView的底部 >,子视图将具有您所描述的布局。了解上述细节后,在故事板中设置约束将非常容易。

您还可以查看我以前的答案,该答案会保留轮次IOS AutoLayout Change possition on Rotation上的观点位置。