我真的希望自己能够了解自动布局。似乎每当我阅读一些关于事物应该如何工作的抽象描述时,它才有意义,但每当我真正尝试并将其付诸实践时,它总会引起巨大的麻烦。所以,如果已经有答案,但我无法找到答案,请道歉。
问题应该相对简单。我有一个容器视图,其中包含两个子视图,这里以可怕的颜色显示以获得最大的可读性:):
底部(黑色)视图应保持其当前大小并保持其与红色视图之间的间距,以及它本身与黄色视图底部之间的间距。 红色视图我希望能够动态地改变它的高度,导致黑色视图相应地向上/向下移动,同时黄色视图调整大小以适合红色+黑色视图。
对于黑色视图,我已将限制添加到:
我试图理解我需要添加的看似神秘的约束条件,以便当红色视图垂直调整大小时,黑色视图保持与红色视图的当前距离并保持其大小,并且外部容器视图相应地调整大小,使其包含红色视图+黑色视图+视图之间的垂直间距。
对于红色视图,我添加了约束来将顶部,左侧和右侧间距固定到superview,但是没有运气来计算垂直约束。目前我有一个约束固定高度= 114,优先级为999,约束高度> = 114,优先级为1000,这样可以确保视图的高度始终至少为114 ...... / p>
当我尝试手动设置红色视图的高度时开始有趣....我在视图上添加了一个按钮,当按下按钮时,我手动设置红色视图的边界。 (红色视图的默认高度为114):
CGRect bounds = self.redView.bounds;
bounds.size.height = 300;
self.redView.bounds = bounds;
当我运行此按钮并按下按钮时,视图将从此处开始:
对此:
对我来说,这没有任何意义。为什么会导致:
我真的很想理解这一点,所以如果有人能够解释需要对常数进行哪些额外的限制/更改,更重要的是为什么需要它们,这将是非常感激的,因为对我而言它似乎并不清楚布局系统如何提出答案......
任何澄清都非常赞赏。
提前致谢
(上面的所有代码都在iOS 7上运行,并使用Xcode 5.0.2构建)。
答案 0 :(得分:0)
你不需要任何花哨的约束来做你想要的事情 - 没有不平等或搞乱优先事项。除了对边的约束外,红色视图应该有20到顶部,51到黑色视图,高度约束为114.黑色视图,底部为20,高度为94.超视图(黄色)应该对顶部,左侧和右侧没有任何限制 - 没有高度。你应该有一个IBOutlet到红色视图的高度约束。如果要更改其高度,请修改其约束(不要设置框架):
- (IBAction)resizeYellowView:(id)sender {
self.heightCon.constant = 300;
}
所有东西都是从黄色视图的顶部到底部用固定值链接在一起,因此当红色视图的高度发生变化时,唯一可以改变的是黄色视图的高度。