如何创建可上下滑动的UITableView?

时间:2017-06-14 11:59:57

标签: ios swift uitableview uiswipegesturerecognizer

我在UIViewController底部有一个UITableView,而tableview高度现在是100点。 storyboard

tableview有20个单元格,tableview的标题视图是100分。我在表视图标题中添加了一个UISwipeGestureRecognizer和一个向下的UISwipeGestureRecognizer。

现在我想在up手势动作中将tableview高度约束常量更改为400,并在向下手势动作中将tableview高度约束常量更改为100。

minimized

maximized

  • 现在问题是手势识别器在tableview中不起作用 启用tableview滚动时的标题。
  • 如果禁用了tableview滚动,那么手势识别器就是 工作。但是一旦tableview高度不能查看所有单元格 改变。

4 个答案:

答案 0 :(得分:4)

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

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

然后,覆盖表格视图的point(inside:withEvent:)方法,仅对y >= 0的点返回true。这意味着当滚动内容时,该表将忽略(传递)其内容之上的触摸,因此只有前100个点可见。

这是小桌子的最终效果:

small table

或大桌子:

big table

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

答案 1 :(得分:3)

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

非常简单的解决方案 -

没有技巧,没什么特别的 -

拥有“表格视图标题”。

只需制作一个新的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'获得滑动时,请在toggleTableHeight

中使用一行代码来调用MainView

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

答案 2 :(得分:2)

我将提出可以为您解决问题的另一个建议

这可能是你想要的:

“自我扩展”表......

为简单起见,首先实现以下内容而不使用动画。

桌子有两个高度,无论大小。

在高度较小的桌子上开始。

值得注意的是,您只需要实现这两个规则:只需两行简单的代码:

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

任何时候用户向下滚动, 您处于桌面的最高位置(即您可以看到单元格#1)实际上变为“身高小”。

这些事情之一就是“如此简单,很难相信它有效!”

我认为它有时被称为“上拉表”。

(注意:如果您不熟悉检测用户滚动的时间,幸运的是trivial - code shown here for example。)

答案 3 :(得分:0)

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

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