如何创建 up/down 可滑动的 UITableView?

How to create up/down swipeable UITableView?

我在 UIViewController 的底部有一个 UITableView,table视图高度现在是 100 磅。

table视图有 20 个单元格,table视图的 header 视图有 100 个点。我在 table 视图 header 中添加了向上的 UISwipeGestureRecognizer 和向下的 UISwipeGestureRecognizer。

现在我想在向上手势动作中将 table 视图高度约束常量更改为 400,在向下手势动作中将 table 视图高度约束常量更改为 100。

因为它可能对其他人有帮助,所以这是针对此类问题的最简单的可能解决方案


极其简单的解决方案 -

没有技巧,没有花哨的东西 -

没有 "table view header"。

新建一个 UIViewController

class TableWithRedTop: UIViewController

有...

[ red area .. swipe detection ]
[ main area - the table view]

然后简单地将 'TableWithRedTop' 放入容器视图中。

(Container view tutorial if you need one.)

在你MainView打个电话

func toggleTableHeight

当'TableWithRedTop'滑动时,有一行代码可以在MainView

中调用toggleTableHeight

请注意,在 toggleTableHeight 中,您可以轻松地设置高度变化的动画、将其倾斜一定角度、复制它或执行任何您想要的操作,因为您在 MainView 中使用容器视图。

将滑动手势的 cancelsTouchesInView 设置为 true 并确保手势直接添加到 header 而不是 tableView。

这应该可以解决问题,但也应该将具有手势识别功能的视图添加到容器视图并设置其约束以匹配 tableView 的顶部、左侧和右侧约束并将其高度设置为 100。

我将提出另一个建议,可能会为您解决问题。

这可能是您想要的:

“自展开”table...

为简单起见,首先在没有动画的情况下实现以下内容。

table 有两种高度,小号和大号。

开始table高度小。

值得注意的是,您只需执行这两条规则:只需两行简单的代码:


任何时候 用户向上滚动 - 事实上,更改为“高度大”。

任何时候用户向下滚动,您位于 table 的顶部位置(即您可以看到单元格 #1) 实际上更改为“高度小”。


其中之一就是“如此简单,令人难以置信!”

我认为它有时被称为“引体向上table”。

(注意。如果您不熟悉检测用户何时滚动,幸运的是它是 。)

这是一种不同的方法。根本不要使用滑动手势识别器。

相反,让 table 始终是完整的 400 点高。将其 contentInset.top 设置为 300。这将允许 table 视图滚动,以便只有其前 100 点的内容在屏幕底部可见。具体来说,table 视图将允许它的 contentOffset.y(这是它的垂直滚动位置)下降到 -300(而不是只下降到 0)。 table的内容总是从y = 0开始,所以当table的contentOffset.y为-300时,只有前100点的内容可见。随着 contentOffset.y 的增加,它的更多内容变得可见。

然后,仅对具有 y >= 0 的点将 table 视图的 point(inside:withEvent:) 方法覆盖为 return true。这意味着当内容滚动时,table 将忽略(通过)其内容上方的触摸,因此只有前 100 个点可见。

这是小table的最终效果:

或大 table:

您可以找到详细的解释(在 Objective-C 中)和完整测试项目的 link(也在 Objective-C 中)in this answer.