我在UIViewController底部有一个UITableView,而tableview高度现在是100点。
tableview有20个单元格,tableview的标题视图是100分。我在表视图标题中添加了一个UISwipeGestureRecognizer和一个向下的UISwipeGestureRecognizer。
现在我想在up手势动作中将tableview高度约束常量更改为400,并在向下手势动作中将tableview高度约束常量更改为100。
答案 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个点可见。
这是小桌子的最终效果:
或大桌子:
您可以找到详细的解释(在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。