【问题标题】:No fixed height in interface builder, constraint predicament界面生成器没有固定高度,约束困境
【发布时间】:2014-07-02 00:37:33
【问题描述】:

我正在尝试创建的屏幕非常简单。我有两个 UIViews 堆叠在一起。顶部的 UIView,topView,高度为 40px,下面的 UIView,botView,占据了屏幕的其余部分。但是,有时 topView 不应该出现,我希望 botView 占据整个屏幕。

我尝试在两个视图上设置宽度、前导/尾随空间。然后 topView 获取到顶部布局指南的距离,botView 获取到底部布局指南的距离,然后是 topView 和 botView 之间垂直间距的附加约束。但这导致 xcode 对我大喊我没有对其中一个视图设置高度或 y 约束。当然,我不能设置高度约束,因为我不希望它们中的任何一个都是固定高度。

我确信这里一定有一个我似乎无法弄清楚的优雅的约束解决方案。想法?

【问题讨论】:

    标签: ios objective-c xcode interface-builder nslayoutconstraint


    【解决方案1】:

    如果topView 应始终为 40px 高度,则为 topView 的高度添加约束。

    对于botView,您可以保留当前的约束,即其顶部必须与topView 的底部相关联。但是为底部视图添加另一个优先级低于required 的约束,表示它应该距离其父视图的顶部 0px。这样,当您从包含视图中删除topView 时,botViewtopView 相关的约束将被删除,因此将满足较低优先级的约束。

    如果您想将topView 推回,请重新创建botViewtopView 远距离约束,优先级为required

    【讨论】:

      【解决方案2】:

      有几种方法可以做到这一点。一种选择

      在 IB 中列出您的观点。然后从顶部、底部、左侧和右侧固定顶视图 0 px。同时指定 40 px 的高度约束。要轻松做到这一点,请单击您的视图,然后在右下角单击看起来像 | 的按钮+ |。单击红色虚线以指定约束。见图片:

      对另一个视图执行相同的操作。不要为此视图指定高度,因为它的高度取决于 40 像素视图的高度。接下来找到 40 px 视图的高度约束。您可以使用助手编辑器来控制将插座拖动到视图控制器,就像使用 UIButton 或任何其他 IB 元素一样。当你想隐藏你的 40 像素视图时,将 variables 常量属性设置为 0。当你想再次显示它时,将它设置回 40。

      self.topViewHeightConstraint.constant = 0;
      

      您可以使用的另一个选项是将顶视图 0 像素固定到顶部、左侧和右侧。不提供底部约束,但将高度指定为 40 像素。对于底部视图,添加 0 px 的左、右和底部约束。对于顶部约束,添加距离顶部超级视图 40 px 的约束。再次为最近的顶部约束添加一个出口,当您希望视图更大时,将该约束设置为 0。

      【讨论】:

        【解决方案3】:

        另一种选择:在 IB 中,为 BOTVIEW 添加到顶部布局引导约束的距离(它将是 40...)然后单击并拖动此常量到 VC 以创建 NSLayoutConstraint 属性。see also here

        现在,在隐藏 topView 的条件下,设置 self.myConstraint.constant = 0;这将强制 botView 调整大小以满足从顶部为 0 的条件。

        您可能必须清除当前的约束以消除错误,但这应该会产生所需的行为。

        至于 Tom Ahh 建议的“topView”,请继续将其高度限制为 40,并将其固定到顶部,就像您已经在做的那样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-13
          • 2020-03-21
          • 2018-01-27
          • 2020-09-10
          • 1970-01-01
          • 2017-09-27
          相关资源
          最近更新 更多