您似乎并不关心顶视图和中间视图的高度是多少,所以我只是要为您做出决定:它们将具有相同的高度。将以下约束添加到这三个视图(_topView、_middleView 和 _bottomView)是子视图的公共父视图中:
NSString *vfl = @"V:|-(10)-[topView]-(10)-[middleView]-(10)-[bottomView(==30)]-(10)-|";
NSDictionary *dict = @{@"topView":_topView,@"middleView":_middleView,@"bottomView":_bottomView};
NSArray *a = [NSLayoutConstraints
constraintsWithVisualFormat: vfl
options: 0
metrics: nil
views: dict];
确保你也水平对齐它们:
NSArray *b = [NSLayoutConstraints
constraintsWithVisualFormat: @"H:|-(10)-[topView]-(10)-|"
options: 0
metrics: nil
views: dict];
NSArray *c = [NSLayoutConstraints
constraintsWithVisualFormat: @"H:|-(10)-[middleView]-(10)-|"
options: 0
metrics: nil
views: dict];
NSArray *d = [NSLayoutConstraints
constraintsWithVisualFormat: @"H:|-(10)-[bottomView]-(10)-|"
options: 0
metrics: nil
views: dict];
编辑
正如您所说,中间视图将是一个标签。标签具有固有的内容大小。如果你不设置这个视图的高度,自动布局系统会本能地知道要做什么。(整洁,对吗?)通过将 _topView 的顶部固定到超级视图的顶部,并将其底部固定到标签的顶部,它的高度应该会自动计算。我已经更改了代码以反映这一点。
编辑 2
为了在代码中添加约束,找到这三个视图的共同祖先(超级视图)并编写[superview addConstraints:a],[superview addConstraints:b], etc...
确保 IB 中的自动布局已关闭并且您将其设置translateResizingMasksToConstraints
为NO
.