2

有什么方法可以像使用 Android 布局一样相对于彼此定位视图?

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

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

Android 的 Linear Layout 和 Relative Layout 让这很容易做到,但我不知道如何做到这一点是 iOS。可以做到吗?

4

2 回答 2

0

您将能够使用 iOS6 中的 AutoLayout 来执行此操作。对于一个应该在iOS 6.0之前运行的应用程序,你必须自己做,但这并不是很复杂。

实际上我已经实现了一个类来做到这一点(那是很久以前的事了,我希望它仍然有效,但没有理由不这样做)。此类OHStackViewUIView自动水平或垂直布局其子视图以堆叠或对齐它们的子类。

您可以要求OHStackView水平或垂直堆叠其子视图(一个在另一个之上等),或对齐它们的上/下/左/右边框或它们的中心,甚至指定每个子视图之间的填充。每次其中一个子视图更改其框架或大小时,OHStackView都会自动重新布局所有相关视图以重新对齐所有内容。 (例如,使用您的两个 UILabel,对您的标签进行简单调用以sizeToFit使它们根据内容调整其大小将自动重新布局周围的所有内容)

提供了一个示例项目,因此请随时对其进行测试。

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

高温高压

于 2012-08-29T16:04:15.133 回答
0

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

于 2012-08-29T15:33:52.153 回答