我在表格的标题视图中有一个UISearchBar。每当动画发生时,例如删除或插入行时,标题视图向下滚动。有没有办法告诉表视图,它不应该(自动)向下滚动标题视图? (只有用户才能将其滑下。)
答案 0 :(得分: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];
}
}
此代码在UITableViewController
内实现,UITableView
充当UITableView
的委托。另一方的UIScrollView
继承自contentOffset
,这使得这些方法可用并执行所有魔法。
用几句话来解释contentInset
和CGPoint
,这让我花了一些时间来理解它们的含义。
UIScrollView
,它只是告诉可见内容的距离,即各部分&amp;表格视图的单元格从左上角向下滚动。包含页眉视图和页脚视图,因此偏移量(0,0)表示表视图滚动到顶部。偏移量(0,100)表示表格视图向下滚动100px(通常不使用该点的x值)。(top, left, bottom, right)
的边界定义为quadrupel {{1}}。因此,如果跨越这些边界,表格视图将会反弹。默认值为(0,0,0,0),表示如果您在其第一个/最后一个单元格的上方/下方滚动,表格视图将会反弹。因此,值(-44,0,0,0)会将反弹限制降低到低于表视图原点44px。由于标题视图高44像素,每次将标题视图滚动到屏幕的可见部分时它都会反弹。这也可以防止行动画在(44,0)的偏移量下滑动表格,“slide to top”命令会将表格视图滑动到(44,0)的偏移量。我希望有所帮助。 :)