如何在iOS中实现可折叠表部分

🎉终于发布了CocoaPod! 看这里。

这是一个简单的iOS项目,演示了如何以编程方式实现可折叠表格部分,即没有主故事板,没有XIB,无需注册笔尖,仅是Swift 3!

在此项目中,表格视图会自动调整行的高度以适合每个单元格中的内容,并且自定义单元格也以编程方式实现。

可以在我的Github上找到源代码。

如何实现可折叠表格部分?

步骤1.准备数据

假设我们将以下数据分为不同的部分,每个部分都是一个Section对象:

crashed表示当前节是否折叠,默认为false

步骤2.设置TableView以支持自动调整大小

步骤3.节标题

根据Apple API参考,我们应该使用UITableViewHeaderFooterView 。 让我们对其进行子类化并实现节头CollapsibleTableViewHeader

当用户点击标题时,我们需要折叠或展开该部分,为此,我们借用UITapGestureRecognizer 。 另外,我们需要将此事件委托给表视图以更新折叠的属性。

由于我们没有使用任何情节提要或XIB,如何以编程方式自动布局? 答案是NSLayoutConstraintConstraintsWithVisualFormat函数。

步骤4. UITableView数据源和委托

段数为sections.count

并且每个部分中的行数为:

注意,我们不需要为折叠部分渲染任何单元格,如果该部分中有很多单元格,则可以大大提高性能。

接下来,我们使用tableView的viewForHeaderInSection函数来连接我们的自定义标头:

普通的行单元格非常简单:

在上面的代码中,我们使用普通的UITableViewCell ,如果您想了解如何制作自动调整大小的单元格,请查看源代码中的CollapsibleTableViewCellCollapsibleTableViewCellUITableViewCell的子类,它添加了名称和详细信息标签,最重要的是它支持自动调整大小功能,关键是正确设置自动布局约束,确保将子视图适当地拉伸到顶部和底部。 contentView

步骤5。如何切换折叠和展开

这个想法真的很简单,如果某节的折叠属性为true ,则将该节内的行的高度设置为0 ,否则设置UITableViewAutomaticDimension

这是切换功能:

重新加载这些节后,将重新计算和重画该节中的单元格数。

就是这样,我们已经实现了可折叠表格部分! 请参考源代码并查看详细的实现。

执照

该项目已获得MIT许可,版权所有©2017 Yong Su。

作者: Yong Su @ Box Inc.