我有一个带两个子视图的视图控制器。
我想将两个子视图固定为相同的相对宽度。
像这样:
谢谢!
答案 0 :(得分:1)
您需要将子视图固定到顶部,左侧,右侧。同时设置相等的宽度属性。
你应该看看this tutorial,有一个等宽容器的好例子。
答案 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
horizontalConstraint的选项将视图顶部和底部固定,而格式字符串也表示两个视图具有相同的宽度即可。我们将第一个视图固定到左边缘,第二个视图固定到右边缘,两个都相等,还有顶部和底部强>被钉住了。现在,我们需要告诉视图其中一个被固定到superView 的上边缘和superView 的下边缘,其中 verticalFormat 描述。现在,我们有相等宽度的视图,其顶部固定在 superView的顶部,底部固定在superView的底部 >,子视图将具有您所描述的布局。了解上述细节后,在故事板中设置约束将非常容易。
您还可以查看我以前的答案,该答案会保留轮次IOS AutoLayout Change possition on Rotation上的观点位置。