iOS:像安卓布局一样的相对定位



有没有像Android布局那样,将视图相对放置?

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

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

安卓的线性布局和相对布局让这很容易做到,但我不知道如何做到这一点是iOS。能做到吗?

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

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

您可以要求OHStackView水平或垂直堆叠其子视图(一个子视图在另一个子视图之上,等等),或者对齐其上/下/左/右边界或中心,甚至在每个子视图之间指定填充。每当其中一个子视图更改其边框或大小时,OHStackView将自动重新显示所有相关视图,以重新排列所有内容。(例如,对于您的两个UILabels,只需简单地调用标签上的sizeToFit,使其根据内容调整大小,即可自动重新发布所有内容)

提供了一个示例项目,请随意测试。

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

HTH

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

最新更新