具有隐藏视图的视觉约束

时间:2016-06-03 07:07:30

标签: ios cocoa-touch constraints

我在iOS应用程序中遇到视觉限制问题。

我有四个UIViews。一个始终是“标题”或顶视图,其他三个轮流在其下方可见,如下所示:

+-------------------+
| HeaderView        |
+-------------------+
| View2|View3|View4 |
+-------------------+

一次只能看到View2,View3或View4中的一个,其他的在不使用时会被隐藏。

现在,使用常规NSLayoutConstraints,我能够让它工作得非常好:

  1. 所有视图都有前导和尾随边距的约束以匹配主机超级视图。
  2. HeaderView有TopMargin来匹配主机超级视图。
  3. 所有观点都限制了它们的高度。 HeaderView为100,View2,View3和View4分别为25,50和75。
  4. View2,View3和View4都有约束,将其Top设置为HeaderView Bottom。
  5. (我不关心View2,View3或View4的任何底部边界 - 它们的高度是固定的,并且它们下方的空白空间在其他地方管理。)
  6. 所以,我正在尝试将其转换为视觉约束。这是我到目前为止的水平约束,它很棒:

    @"H:|-0-[HeaderView]-0-|"
    @"H:|-0-[View2]-0-|"
    @"H:|-0-[View3]-0-|"
    @"H:|-0-[View4]-0-|"
    

    现在,垂直约束是我遇到麻烦的地方:

    我尝试了以下内容:

    @"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]"
    

    我也尝试过分裂:

    @"V:|-0-[HeaderView(100)-0-[View2(25)]"
    @"V:|-0-[HeaderView(100)-0-[View2(50)]"
    @"V:|-0-[HeaderView(100)-0-[View2(75)]"
    

    现在,问题是垂直布局永远不会正确 - 几乎总是,View2,View3或View4将位于HeaderView的顶部,而不是它的下方。

    有关如何清理并修复垂直布局的任何建议吗?

2 个答案:

答案 0 :(得分:1)

试试这个,

 V:[HeaderView(100)]-[View1(25)]
 V:[HeaderView(100)]-[View2(50)]
 V:[HeaderView(100)]-[View3(75)]

并确保您正确设置views方法的constraintsWithVisualFormat参数。它应该是super view的{​​{1}},您要设置约束,或者应该与您的约束相关联。{/ p>

希望这会有所帮助:)

答案 1 :(得分:0)

MarcWan,

约束中没有任何错误我相信如果这完全是你在所有约束中错过']'所使用的约束。

试试这个,

@"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]"