TZStackView 1.3.0

TZStackView 1.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年9月
SPM支持 SPM

维护者: Tom van Zummeren



  • 作者:
  • tomvanzummeren

TZStackView

一个被称为 UIStackView 的出色布局组件随着 iOS 9 的发布而被引入。使用此组件,水平或垂直排列组件变得非常容易。Apple 建议尽可能使用 UIStackView,只有当无法使用 UIStackView 实现时才求助于显式的 NSLayoutConstraints。这样可以节省大量的样板 NSLayoutConstraint 代码。

UIStackView 需要 iOS 9,但我们还不准备使我们的应用程序需要 iOS 9+。在此同时,我们开发者渴望立刻在我们的应用程序中尝试这个组件!这就是我创建此 UIStackView 的复制品,称之为 TZStackView(TZ = Tom van Zummeren,我的首字母)。我非常认真地创建了此组件,测试了每一个边缘情况,并使用自动化的 XCTestCases 将结果与真正的 UIStackView 进行了匹配。

特性

  • 兼容 iOS 7.xiOS 8.x
  • 支持 UIStackView 的全部 API,包括所有 分布对齐 选项
  • 支持对 已排列的子视图hidden 属性进行动画处理
  • 支持 Storyboard

因此,此实现不支持 Storyboard。它是为那些像我一样,希望在我们现有应用程序中使用 UIStackView 并喜欢通过代码而不是通过 Storyboard 布局组件的 iOS 开发人员而设计的。

设置

TZStackView 包含到您的 Xcode 项目的有基本两种方式

直接将文件拖入项目中

或者(当您想支持 iOS 7 时),从 示例 文件夹中拖入以下类到您的 Xcode 项目

  • TZStackView
  • TZSpacerView
  • TZStackViewAlignment
  • TZStackViewDistribution

示例用法

给定 view1view2view3,它们内部内容大小分别设置为 100x10080x8060x60

let stackView = TZStackView(arrangedSubviews: [view1, view2, view3])
stackView.distribution = .FillEqually
stackView.alignment = .Center
stackView.axis = .Vertical
stackView.spacing = 25

这将产生以下布局

TZStackView Layout example

请查阅 关于 UIStackView 的开发者文档,了解所有其他分布、对齐和轴的组合。TZStackView 的工作方式和行为与 UIStackView 完全相同,唯一不同的是不支持 Storyboard。如果发现问题不同,请提交错误报告。

要动画地添加一个视图到或从已排布的子视图中移除视图,只需调整 animation block(如 UIStackView 参考文档中所述)内的 hidden 属性来隐藏或显示它们。

UIView.animateWithDuration(0.5, animations: {
    self.view2.hidden = true
})

TZStackView hidden animation example

迁移到 UIStackView

如果您后来决定将 iOS 9 作为应用程序的最低要求(这迟早会发生),那么您将该迁移到真正的 UIStackView,而不是使用此实现。因为 TZStackViewUIStackView 的简化替代品,您只需进行替换

let stackView = TZStackView(arrangedSubviews: views)

……

let stackView = UIStackView(arrangedSubviews: views)

…… 然后,就可以继续使用了!您无需进行任何其他更改,一切都会按照之前的方式工作。

许可证

TZStackView 根据 MIT 许可发布。有关详细信息,请参阅 LICENSE 文件。