如何使用自动布局调整视图?

时间:2013-07-18 07:54:41

标签: iphone objective-c autolayout

我在我的示例应用中使用AutoLayout。我有三个视图,topView,middleView,bottomView.Following是我需要的约束,

冠捷:

  1. 始终从x原点10开始。
  2. 左右边距10。
  3. 高度应根据屏幕边界(或超视图)而有所不同。
  4. middleView:

    1. 顶视图和中间视图之间应有10 px的垂直边距。
    2. 左右边距10。
    3. 高度应根据屏幕边界(或超视图)而有所不同。
    4. bottomView:

      1. 中间和底部视图之间应该有10 px的垂直边距。
      2. 左右边距10。
      3. 高度应该是恒定的,例如30。
      4. 我希望根据设备屏幕尺寸,底视图y原点应该更改,以便调整中间和顶部视图大小。 这里的问题是没有办法找出,底视图的y原点应该是什么,并且接口提供永久约束,如:

        1. 查看中间视图的顶层空间。
        2. 顶视图以查看底部视图。
        3. 这是因为没有办法找出视图的高度。 只有困难是确定顶视图和中视图的高度。 enter image description here

1 个答案:

答案 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}}。