如何在Notes.app中复制UISearchBar滚动行为?

时间:2010-07-29 14:33:04

标签: iphone uitableview scroll uisearchbar

向下滚动tableView( Notes.app )时,搜索栏会固定在顶部,但是当您向上滚动tableView时,搜索栏会被隐藏。这就是我想要的。

查看滚动指示器,看起来UISearchBar是表滚动视图的子视图。但是,如果我将一个搜索栏添加到Interface Builder中的tableView,那么它总是像常规行一样滚动附加到tableView。

3 个答案:

答案 0 :(得分:4)

在表格视图中,将空白透明UIView(searchBarPlaceholderView)放入tableHeaderView插槽中,该插槽具有UISearchBar的尺寸。然后将UISearchBar(searchBar)添加到顶级视图。

然后,在您的表视图委托中,添加

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect sbFrame = searchBar.frame;
    sbFrame.origin.y = searchBarPlaceholderView.frame.origin.y - scrollView.contentOffset.y;

    // it cannot move from the top of the screen
    if (sbFrame.origin.y > 0) {
        sbFrame.origin.y = 0;
    }

    searchBar.frame = sbFrame;
}

答案 1 :(得分:1)

这是默认行为。你只需要将表格放在表格的第一个标题中(我猜这是第0节)。

然而,我刚刚用UITableViewController创建了一个新的应用程序,通过Interface Builder,我将UISearchBar放在tableView的上方,它的行为就像Notes.app应用程序一样。

答案 2 :(得分:1)

将搜索栏添加到界面构建器中的表格视图中,就像正常一样(也就是说搜索栏应该是表格的子视图)。

然后在委托中实现此方法:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    UISearchBar *searchBar = self.searchDisplayController.searchBar;
    if(scrollView.contentOffset.y <= 0) {
        searchBar.frame = CGRectMake(0, scrollView.contentOffset.y, searchBar.frame.size.width, searchBar.frame.size.height);
    }
}