可靠的解决方案,可根据子视图灵活调整UIView的大小

时间:2014-09-01 19:36:17

标签: ios cocoa-touch uiview

想象一下,你有四个左右的视图,全宽100,不同的高度。你有一个包装器视图W,它可以保存它们。

A   |
B   |  W
C   |
D   |

小视图的高度可以改变。那时你想让他们全部移动,漂浮,适当地调整W。

现在,我正准备编写几行代码来完成此任务。

所以..(1)你有W找到所有的子视图并按顺序从上到下列出。然后(2)每次有变化时,你(3)重新定位每个ABCD。每一个的位置是它上面项目高度的总和,(4)将W调整为所有高度的总和。

现在一切都很好但是 - 白痴重新发明了轮子!

我错过了iOS中显而易见的东西吗?是不是每个人都使用这个包来做这件事?还是内置的东西?情况如何?

(请注意,当然令人沮丧的是,对于我们的Android朋友来说,这是内置的!当然,任何web-html系统都会自动执行此操作。)

这里适用于iOS视图的正确工程解决方案是什么?据记载,这只是iOS7 +,如果它有所作为,则不需要覆盖任何老式的东西。干杯

1 个答案:

答案 0 :(得分:1)

  

(1)你有W找到所有子视图并按从上到下的顺序列出它们   到底。然后(2)每次有变化时,你都会(3)重新定位   每个ABCD。每个人的位置是高度的总和   它上面的项目,以及(4)将W调整为所有高度的总和。

您可以在Interface Builder中使用约束来完成整个过程,无需代码。这样做:

  • 将子视图A的宽度设置为100
  • 约束B,C和D以匹配A的宽度
  • 在A和B,B和C以及C和D之间添加垂直间距约束以保持其相对位置
  • 在W(superview,灰色显示)和A
  • 之间添加垂直间距约束
  • 在W和D之间添加垂直间距约束
  • 在W和视图A之间添加前导空格和尾随空格约束

你最终会看到这样的东西:

constraints

Xcode中的约束编辑器并不完全直观,但是一旦你理解了你可以做什么和不能用IB中的约束以及当你需要使用代码时它 易于使用设置约束。