一个称为 UIStackView
的出色布局组件,随着 iOS 9 的推出而引入。使用此组件,您可以在水平垂直方向非常容易地布局组件。Apple 建议尽可能使用 UIStackView
,只有当使用 UIStackView
无法完成时才求助于显式的 NSLayoutConstraints
。这为您节省了大量样板代码 NSLayoutConstraint
的创建。
UIStackView
需要 iOS 9,但我们尚未准备好让我们的应用程序要求 iOS 9+。在此期间,我们作为开发者,渴望立即在我们的应用程序中尝试这个组件!这就是为什么我创建了 UIStackView
的这个副本,称为 TZStackView
(TZ = Tom van Zummeren,我的首字母)。我非常仔细地创建了此组件,测试了每个角落和边缘情况,并使用自动化的 XCTestCases
将结果与真实的 UIStackView
进行了匹配。
UIStackView
APIhidden
属性因此,此实现不支持 Storyboard。它是为 iOS 开发者准备的,像我一样,希望在我们的现有应用程序中使用 UIStackView
并喜欢在代码中而不是使用 Storyboard 布局组件。
基本有两种方法可以向您的 TZStackView
或者(如果您想支持 iOS 7),将以下类从 Example 文件夹中拖放到您的
TZStackView
TZSpacerView
TZStackViewAlignment
TZStackViewDistribution
给定 view1
、view2
和 view3
,它们的内在内容尺寸分别设置为 100x100、80x80 和 60x60。
let stackView = TZStackView(arrangedSubviews: [view1, view2, view3])
stackView.distribution = .FillEqually
stackView.alignment = .Center
stackView.axis = .Vertical
stackView.spacing = 25
这会产生以下布局
请参考《UIStackView 开发者文档》以了解所有关于分布、对齐和轴的其他组合。《TZStackView》与《UIStackView》的功能和行为完全相同,唯一的区别是不支持Storyboard。如果您发现《TZStackView》有不符合预期的行为,请提交一个bug报告。
要动画添加视图到或从排列的子视图中移除,只需在动画块内调整其hidden
属性来隐藏或显示它们(与《UIStackView》参考文档描述相同)
UIView.animateWithDuration(0.5, animations: {
self.view2.hidden = true
})
如果将来某个时候您决定将至少iOS 9作为应用的最低要求(这迟早会发生),您希望迁移到真正的《UIStackView》而不是使用这个实现。因为《TZStackView》是《UIStackView》的直接替换项,所以您可以简单地替换:
let stackView = TZStackView(arrangedSubviews: views)
with …
let stackView = UIStackView(arrangedSubviews: views)
… 这样您就可以继续前行了!您不需要进行任何其他更改,所有内容都将如以前一样正常工作。
LICENSE
以获取详细信息。