AutoLayout - 如何绑定两个视图并相应地更改大小

时间:2014-03-21 14:01:43

标签: ios xcode user-interface constraints

我想要一些看起来很简单的东西,但我无法弄清楚如何从IB中做到这一点。

我想要一些简单的东西,让我说我有两个视图到一个父母(一个容纳两个孩子的视图容器)。我想要的是它们每个都连接到0 px的垂直空间(一个到另一个顶部,另一个到底部)。因此,当其中一个改变其大小时,另一个占用剩余大小,因此仍然会以0像素相互连接。

我已经放了两张我想要的屏幕截图。

enter image description here enter image description here

我已经尝试了很多很多,没有什么能像我期待的那样工作。

奇怪的是,即使我将优先级放在垂直空间,其他约束优先,我只是从XCode得到一个警告,我的verticalSpace约束是错误的。

有人可以帮助我吗?我没有找到关于此类视图管理的特定教程。 感谢

*编辑*

好的,我想通了: 我终于按照建议阅读了Ray的整个教程,这对我帮助很大(为了我的辩护,我在IOS官方文档之前已经阅读了有关约束的内容,而且让我感到困惑的不仅仅是帮助我)。对我来说,难以理解的是,现在你不能按框架改变UIView,但现在是通过约束来改变。当我理解这一点时,很容易做出改变。

顺便说一句,我尝试了@ Handsomeguy的回应,它就像一个魅力。

4 个答案:

答案 0 :(得分:1)

我认为您在其中一个视图上至少需要一个高度约束(对于您的视图控制器使用IBOutlet)...当您更改其常量值时,另一个视图应自动更改。您可以先尝试故事板,然后记下逻辑。但是如果没有高度限制,我就不会认为它会起作用。

答案 1 :(得分:1)

我能够通过在界面构建器中设置约束来实现它:

  1. 垂直间距:顶部布局指南 - >黄
  2. 垂直间距:黄色 - >红色
  3. 垂直间距:红色 - >底部布局指南
  4. 身高:黄色
  5. 将出口设置为高度约束,然后更改黄色视图的高度,只需使用_height.constant = NEW_HEIGHT

    如果顶视图适当地报告其内在内容高度,则可以省略高度约束。

答案 2 :(得分:0)

如果没有自动布局,就像在黄色视图上放置一个锚底,并将一个锚顶放在红色底部上一样简单。现在,当您更改父视图时,视图将调整为50/50。

答案 3 :(得分:0)

使用自动布局。您需要以下约束:

both views pinned to left and right edge of containerView
redView top pinned to containerView top
yellowView top pinned to redView bottom
yellowView bottom pinned to containerView bottom
height constraint on **either* redView **or** yellowView!

使用此类别非常容易: https://github.com/jrturton/UIView-Autolayout

<强>更新

我刚注意到你说你想在IB做这件事。你可以在这里使用相同的原理,但如果你使用上面提到的类别,我发现它更方便(以后也更容易阅读)。将会有很少的代码行,代码将清楚地显示意图。

**更新2 **

如果更改了一个视图的内在大小,则可能不需要显式高度约束。这取决于黄色和绿色视图的视图类型。