2014-09-01 29 views
1

想象一下,您有四个左右的视图,所有宽度为100,高度不同。你有一个包装视图W,它包含了所有的视图。根据子视图灵活调整UIView大小的解决方案

A | 
B | W 
C | 
D | 

小视图的高度可以改变。那时你希望它们全都移动,浮动,适当地调整大小W.

现在,我正要编写几行代码来完成此操作。 (1)你会找到所有子视图并按顺序从上到下列出它们。然后(2)每次有变化时,你会(3)重新定位每个ABCD。每一个的位置是它上面项目高度的总和,(4)将W调整到所有高度的总和。

现在这一切都很好,但白痴重新发明轮子!

我在iOS中缺少明显的东西吗?是否已经有一个人人用来随时这样做的软件包?或者内置了什么?情况如何?

(注意,当然令人沮丧,对我们的Android的朋友,这是建立在!当然还有任何网页的HTML系统自动执行此操作。)

什么是这里的iOS意见的权利的工程解决方案?为了记录这只是iOS7 +,如果它有所作为,则不需要覆盖任何老式的东西。干杯

+2

你有没有遇到iOS中自动布局的概念? – avismara 2014-09-01 19:44:23

+0

老兄我没有做过自动布局的项目..他们完全解决了这个问题吗?所以,在这个例子中,如果我使C更高。它会自动移动D,并使W自动变大吗?谢谢 – Fattie 2014-09-01 19:50:49

+0

只要你设定D的约束条件总是低于C,是的。为了让W“自动”更大,如果没有任何工作,你总是有'sizeToFit'。 :) – avismara 2014-09-01 19:52:46

回答

1

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

您可以在Interface Builder中为整个过程使用约束,无需代码。做到这一点:

  • 设定子视图A的宽度为100
  • 约束B,C,和d以匹配A的宽度
  • 添加A和B,B和C,和C之间的垂直间距的约束d以保持它们的相对位置
  • 添加W之间的垂直间距约束(在上海华,以灰色示出)和A
  • 添加W和d
  • 之间的垂直间距约束添加前导和W之间尾随空间限制查看A

你最终的东西,看起来像这样:

constraints

在Xcode约束编辑器不是完全直观,但它容易,一旦你知道用什么您可以也不可以在IB中使用约束,并且您需要使用代码来设置约束。

+0

嗨Caleb!那么要清楚。 **当应用程序运行时**,如果我改变说两个项目的高度....那么,在那个时候其他三个将被移动,所以关系仍然存在?谢谢。另外,TBC,你是否也可以用你真棒技术以纯粹的IB方式做“持有视图”(在我的例子中是W)?!谢谢! – Fattie 2014-09-08 15:33:08

+0

是的,这是自动布局的要点。您可以在视图之间创建一组约束,并且每当受影响的对象发生更改时,自动布局都会尝试满足这些约束。我将编辑答案,以清楚地表明灰色矩形是您的“持有视图”,令人惊叹的是W. – Caleb 2014-09-08 15:35:25

+0

。你可以把事情想象成一个游戏,比如用你的手指来调整它们的大小。你所说的这个“自动布局”,完全可以把剩下的东西搬走。谢谢!为什么不是所有人都用这个?!我只是用一个折叠面板做了一件事。我在倒塌时手动移动其他东西:愚蠢的,对吧?我可以用这个! – Fattie 2014-09-08 15:39:42

相关问题