我在我的示例应用中使用AutoLayout。我有三个视图,topView,middleView,bottomView.Following是我需要的约束,
冠捷:
middleView:
bottomView:
我希望根据设备屏幕尺寸,底视图y原点应该更改,以便调整中间和顶部视图大小。 这里的问题是没有办法找出,底视图的y原点应该是什么,并且接口提供永久约束,如:
这是因为没有办法找出视图的高度。 只有困难是确定顶视图和中视图的高度。
答案 0 :(得分:2)
您似乎并不关心顶视图和中间视图的高度,所以我只是要为您做出决定:它们将具有相同的高度。将以下约束添加到常见的superview中,这三个视图(_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
设置为{ {1}}。