【问题标题】:Visual Constraints with Hidden Views具有隐藏视图的视觉约束
【发布时间】:2016-06-03 15:52:30
【问题描述】:

我在 iOS 应用中遇到了一些视觉限制。

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

+-------------------+
| 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 的任何底部边界 - 它们的高度是固定的,它们下方的空白空间在其他地方进行管理。)

所以,我正在尝试将其转换为视觉约束。到目前为止,这是我对水平约束的了解,非常棒:

@"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 的顶部,而不是它的下方。

关于如何清理和修复我的垂直布局的任何建议?

【问题讨论】:

    标签: ios cocoa-touch constraints


    【解决方案1】:

    这样试试,

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

    并确保您正确设置了constraintsWithVisualFormat 方法的views 参数。它应该是您设置约束的views 中的super view,或者应该查看您的约束与谁相关。

    希望这会有所帮助:)

    【讨论】:

    • 还有一个疑问 :) 当要求将其应用于 View1、View2 和 View 3 时,您是否在 sameView View2 上应用了所有 25 30 75 高度约束 :) 我知道这是他的一部分问题,但那是错误的不是吗:) 影响是 View2 的高度将为 75,而其他高度将是隐式的,因此设置为 0 :)
    • 是的,这也是错字,我刚刚复制并粘贴了一行 3 次作为 OP 的回答而忘记编辑!
    • 这个对我来说效果最好。谢谢!很简单。
    【解决方案2】:

    马克万,

    约束没有错我相信如果这正是您使用的约束,那么您在所有约束中都错过了']'。

    试试这个,

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

    【讨论】:

    • @marcwan : 你写过 HeaderView.translatesAutoresizingMaskIntoConstraints = false,View2.translatesAutoresizingMaskIntoConstraints = false, View3.translatesAutoresizingMaskIntoConstraints = false 最后是 View4.translatesAutoresizingMaskIntoConstraints = false
    • 是的,@lion 的上述回答完全成功了。我只是想多玩一下你的答案,看看我能不能把它全部重新放到一行中^_^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2023-04-11
    相关资源
    最近更新 更多