我的表的标题视图中有一个 UISearchBar。每当动画发生时,例如当删除或插入行时,标题视图会向下滚动。有没有办法告诉表格视图,它不应该(自动)向下滚动标题视图?(只有用户应该能够向下滑动它。)
问问题
685 次
1 回答
0
在 Google 和 StackOverFlow 上进行广泛搜索后,我找到了正确的线索: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];
}
}
此代码在 a 中实现UITableViewController
,它充当UITableView
. UITableView
另一方面,继承自,UIScrollView
这使得这些方法可用并执行所有魔术。
几句话来解释contentOffset
and contentInset
,我花了一段时间才理解它们的意思。
- 偏移量是 a
CGPoint
,它简单地告诉可见内容(即表格视图的部分和单元格)从左上角向下滚动的距离。包含页眉视图和页脚视图,因此 (0, 0) 的偏移量表示表格视图滚动到顶部。(0, 100) 的偏移量表示表格视图向下滚动了 100 像素(通常不使用该点的 x 值)。 - 插图是一个非常有趣的属性,它将 的边界定义
UIScrollView
为 quadrupel(top, left, bottom, right)
。因此,如果您越过这些边界,表格视图将会反弹。默认值为 (0, 0, 0, 0),这意味着如果您在其第一个/最后一个单元格的上方/下方滚动,表格视图将反弹。因此 (-44, 0, 0, 0) 的值会将反弹边界降低到表格视图原点以下 44 像素。由于我的标题视图是 44px 高,每次你将标题视图滚动到屏幕的可见部分时,它都会反弹。这也可以防止行动画将表格滑动到偏移量 (44, 0) 以下,并且“滑动到顶部”命令会将表格视图滑动到偏移量 (44, 0)。
我希望这会有所帮助。:)
于 2012-05-03T18:28:01.480 回答