如何防止行动画向下滚动 TableHeaderView?
Posted
技术标签:
【中文标题】如何防止行动画向下滚动 TableHeaderView?【英文标题】:How can I prevent row animations from scrolling down my TableHeaderView? 【发布时间】:2012-04-18 14:47:05 【问题描述】:我的表格的标题视图中有一个 UISearchBar。每当动画发生时,例如删除或插入行时,标题视图会向下滚动。有没有办法告诉表格视图,它不应该(自动)向下滚动标题视图? (只有用户才能向下滑动。)
【问题讨论】:
【参考方案1】:在 Google 和 *** 上进行广泛搜索后,我找到了正确的线索:UIScrollView
。我一直在寻找并最终实现的实际解决方案可以在另一个问题中找到:Change Default Scrolling Behavior of UITableView Section Header
我稍微定制了解决方案,使其具有以下属性:
行动画可能会向下滚动表格视图,除非显示标题视图 单击顶部(“滚动到顶部”)应将表格视图滚动到顶部,不包括标题视图 如果标题视图部分可见,则它应该向下滑动,使其完全可见此解决方案的代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat searchBarHeight = self.searchBar.frame.size.height;
if (scrollView.contentOffset.y >= searchBarHeight)
scrollView.contentInset = UIEdgeInsetsMake(-searchBarHeight, 0, 0, 0);
else
scrollView.contentInset = UIEdgeInsetsZero;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
if (scrollView.contentOffset.y < self.searchBar.frame.size.height && scrollView.contentOffset.y > 0)
[scrollView setContentOffset:CGPointZero animated:YES];
此代码在UITableViewController
中实现,它充当UITableView
的委托。另一边的UITableView
继承自UIScrollView
,这使得这些方法可用并执行所有魔法。
几句话解释contentOffset
和contentInset
,我花了一段时间才明白它们的意思。
CGPoint
,它只是告诉可见内容,即表格视图的部分和单元格从左上角向下滚动的距离。包含页眉视图和页脚视图,因此 (0, 0) 的偏移量表示表格视图滚动到顶部。 (0, 100) 的偏移量表示表格视图向下滚动了 100 像素(通常不使用点的 x 值)。
插图是一个非常有趣的属性,它将UIScrollView
的边界定义为四元(top, left, bottom, right)
。因此,如果您越过这些边界,表格视图将会反弹。默认值为 (0, 0, 0, 0),这意味着如果您在其第一个/最后一个单元格的上方/下方滚动,表格视图将反弹。因此 (-44, 0, 0, 0) 的值会将反弹边界降低到表格视图原点以下 44 像素。由于我的标题视图是 44px 高,每次你将标题视图滚动到屏幕的可见部分时,它都会反弹。这也可以防止行动画将表格滑动到偏移量 (44, 0) 以下,并且“滑动到顶部”命令会将表格视图滑动到偏移量 (44, 0)。
我希望这会有所帮助。 :)
【讨论】:
以上是关于如何防止行动画向下滚动 TableHeaderView?的主要内容,如果未能解决你的问题,请参考以下文章
添加具有行动画的单元格时,将 tableview 保持在相同的滚动位置