我想得到这样的行为:我有一个 UISearchBar,它是我的 tableview 的表头视图。滚动表格时,搜索栏确实会移动,但如果您在表格边界上方滚动,搜索栏将永远不会停止接触导航栏。
我在这里找到了一个很好的答案 -将 UISearchBar 锁定到像 Game Center 这样的 UITableView 的顶部 但它不适用于 iOS 6 - 使用表格视图标题框架进行操作不起作用
这可能是什么原因?
我想得到这样的行为:我有一个 UISearchBar,它是我的 tableview 的表头视图。滚动表格时,搜索栏确实会移动,但如果您在表格边界上方滚动,搜索栏将永远不会停止接触导航栏。
我在这里找到了一个很好的答案 -将 UISearchBar 锁定到像 Game Center 这样的 UITableView 的顶部 但它不适用于 iOS 6 - 使用表格视图标题框架进行操作不起作用
这可能是什么原因?
我找到了一个适用于 iOS 6 及更低版本的解决方案
创建 UITableView 的子类并覆盖layoutSubviews
方法
- (void)layoutSubviews
{
[super layoutSubviews];
CGRect rect = self.tableHeaderView.frame;
rect.origin.y = MIN(0, self.contentOffset.y);
self.tableHeaderView.frame = rect;
}
如果您使用以下内容:
[_tableView setTableHeaderView:_searchBar];
当您将表格视图滚动到第一行之外时,搜索栏也应该消失而不是停留在视图的顶部。
在没有看到您的代码的情况下,我只能假设您添加了UISearchBar
作为节标题而不是表标题?
那是因为iOS6 sdk在滚动时没有更新,也许同样优化。所以滚动时需要调用tableview layoutSubviews。
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UISearchBar *searchBar = searchDisplayController.searchBar;
CGRect rect = searchBar.frame;
rect.origin.y = MIN(0, scrollView.contentOffset.y);
[scrollView layoutSubviews];
searchBar.frame = rect;
}