有没有办法像Android布局那样相对放置视图?

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

另一个示例:与上述情况相同,但是其中一个标签有时被隐藏。您希望结果标签在父级中垂直居中,而不管是一个标签还是两个标签。

Android的“线性布局”和“相对布局”使此操作非常容易,但是我不知道如何在iOS中做到这一点。能做到吗

最佳答案

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

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

您可以要求OHStackView将其子视图水平或垂直堆叠(一个在另一个之上,等等),或者对齐其上/下/左/右边框或中心,甚至在每个子视图之间指定填充。每次子视图之一更改其框架或大小时,OHStackView都会自动重播所有依赖的视图以重新对齐所有视图。
(例如,使用您的两个UILabel,只需简单调用标签上的sizeToFit即可使标签调整其大小以适应其内容,这将自动中继周围的所有内容)

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

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

高温超导

08-05 23:36