iOS:相对定位,如Android的布局

时间:2012-08-29 15:17:11

标签: android iphone ios android-layout interface-builder

是否有任何方式相对于彼此的位置视图,就像使用Android布局一样?

示例:您有两个UILabel动态设置为可变长度的字符串,一个在另一个之上,并且您希望底部标签直接显示在顶部标签的最后一行下方,而不管顶部标签的行数是多少最终拥有。

另一个例子:与上面相同的情况,但其中一个标签有时是隐藏的。您希望生成的标签在父级中垂直居中,无论它是一个标签还是两个标签。

Android的线性布局和相对布局使这很容易做到,但我无法弄清楚如何做到这一点是iOS。可以吗?

2 个答案:

答案 0 :(得分:0)

我一直在寻找是否有可能很长一段时间。据我所知,现在不可能。我不记得我在哪里读到这个,但是ios6可以实现。您可以使用sizeWithFont方法检测UILabel的大小,而不是使用Android的线性布局,然后您可以设置它们的框架以定位它们。首先,您需要设置其文本以便找到它们大小根据他们的字体系列。您可以使用的另一件事是sizeToFit方法。不幸的是,我不知道如何使用它。不过你可以试一试。那时,我发现了这个。也许,你可以使用它https://github.com/scalessec/CSLinearLayoutView

答案 1 :(得分:0)

您可以在iOS6中使用AutoLayout执行此操作。对于应该在6.0之前的iOS中运行的应用程序,您必须自己完成,但这并不是很复杂。

实际上我已经实施了a class to do this (很久以前,我希望它仍然有效,但没有理由不这样做)。此 OHStackView 类是UIView的子类,可自动将其子视图水平或垂直布局以堆叠或对齐它们。

您可以要求OHStackView水平或垂直堆叠其子视图(一个在另一个之上等),或者对齐它们的上/下/左/右边框或它们的中心,甚至在每个子视图之间指定一个填充。每当其中一个子视图更改其框架或大小时,OHStackView将自动重新排除所有依赖视图以重新排列所有内容。 (例如,使用您的两张UIL用户,只需拨打sizeToFit对您的标签进行简单调用,使他们根据自己的内容调整尺寸,即可自动重新排列所有内容。

提供了一个示例项目,因此可以随意测试它。

注意:IIRC,我的子类不考虑子视图的“隐藏”属性。但是,您可以通过在if (v.hidden) continue;实现的for循环中添加layoutSubview这样的条件来轻松添加对此行为的支持,以便仅在布局算法中考虑非隐藏视图。< / em>的

HTH