【发布时间】:2015-06-25 18:22:03
【问题描述】:
我想折叠一个部分内的所有单元格。我想通过点击我在部分标题中添加的按钮来做到这一点。显然,带有动画。不只是消失。我有一个想法,如果我可以获取该部分的索引路径,因为我在每个部分中都有恒定数量的单元格,我可以创建一个 switch 语句来为具有适当索引的单元格设置动画。
【问题讨论】:
我想折叠一个部分内的所有单元格。我想通过点击我在部分标题中添加的按钮来做到这一点。显然,带有动画。不只是消失。我有一个想法,如果我可以获取该部分的索引路径,因为我在每个部分中都有恒定数量的单元格,我可以创建一个 switch 语句来为具有适当索引的单元格设置动画。
【问题讨论】:
您可以使用 beginUpdates/endUpdates 块。您将更改到您希望发生动画的 tableView 放入此块中。 (但不要在块内调用[tableView reloadData]。)
例如,您在节标题按钮点击处理程序中编写如下内容:
[self.tableView beginUpdates];
[self.tableView deleteRowsWithIdexPaths:indexPathsToDelete
withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
使用此代码行,索引为 indexPathsToDelete 的行将随着 UITableViewRowAnimationTop 动画消失,但您可以根据需要更改动画类型。
更多信息见WWDC2010 Video“掌握表格视图”,特别是17:40开始的演示。
【讨论】:
indexPathsToDelete 是索引路径数组,所以应该是这样的:@[[NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0]]
1:将动作分配给标题视图(我确定部分点击有委托回调,否则将TapGesture添加到标题视图)
2:如果您使用自动布局,则为 tabvleView 的高度约束设置动画,否则为 tableView 的 frame.height
有什么有效的方法吗?也许 UITableView 内置了取消停靠功能:)
【讨论】:
我认为为以下 UITableViewDelegate 函数添加用于展开/折叠行的自定义动画可能会起作用...
可选的 func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
此外,以下链接为隐藏表格视图单元格/行提供了一个很好的解决方案...
How to display and hide table view cells in swift
祝你好运!
【讨论】:
所以如果你使用 AutoLayout(你应该使用它,因为它很棒),那么 UIView *contentView 的动画将如下所示:
IBOutlet NSLayoutConstraint *contentViewHeightConstraint;
将 Interface Builder 中的这个 Outlet 连接到 contentView 的高度约束。
如果你不知道 contranits 和 autolayout,那么 youtube 和练习 2 周 :)
- (void)moveViewsUp {
[contentView setNeedsUpdateConstraints];
int delta = 100;
[UIView animateWithDuration:ANIM_DURATION
animations: ^{
contentViewHeightConstraint.constant = -delta;
[contentView layoutIfNeeded];
}
completion: ^(BOOL finished) {
}];
}
- (void)moveViewsDown {
[contentView setNeedsUpdateConstraints];
[UIView animateWithDuration:ANIM_DURATION
animations: ^{
contentViewHeightConstraint.constant = 0;
[contentView layoutIfNeeded];
}
completion: ^(BOOL finished) {
}];
}
【讨论】: