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

Iphone 如何在Notes.app中复制UISearchBar滚动行为?,iphone,uitableview,scroll,uisearchbar,Iphone,Uitableview,Scroll,Uisearchbar,向下滚动tableView(Notes.app)时,搜索栏固定在顶部,但向上滚动tableView时,搜索栏隐藏。这就是我想要的 查看滚动指示器,UISearchBar似乎是表滚动视图的子视图。但是,如果我在Interface Builder中向tableView添加搜索栏,那么它总是像普通行一样滚动附加到tableView。这是默认行为。您只需在表格的第一个标题中删除该条(我猜是第0节) 但是,我刚刚创建了一个带有UITableViewController的新应用程序,并通过界面生成器将UIS

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


查看滚动指示器,UISearchBar似乎是表滚动视图的子视图。但是,如果我在Interface Builder中向tableView添加搜索栏,那么它总是像普通行一样滚动附加到tableView。

这是默认行为。您只需在表格的第一个标题中删除该条(我猜是第0节)


但是,我刚刚创建了一个带有UITableViewController的新应用程序,并通过界面生成器将UISearchBar放在tableView的上方,其行为与Notes.app应用程序类似。

在table view中,将一个空白的透明UIView(
SearchBarPlaceholder view
)放入tableHeaderView插槽,具有UISearchBar的精确尺寸。然后将UISearchBar(
搜索栏
)添加到顶层视图

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

- (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;
}

将搜索栏添加到interface builder中的表视图(与普通一样)(也就是说,搜索栏应该是表的子视图)

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

-(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);
    }
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
UISearchBar*searchBar=self.searchDisplayController.searchBar;

如果(scrollView.contentOffset.y我们可以看到或测试的任何代码都是appNo,至少对我来说不是。试着向下拖动表格-搜索栏将沿着它一直向下。在Notes.app中,搜索栏保持附着在顶部。哦,现在我明白了。通过查看Notes.app,搜索栏似乎不是表格的一部分,但它是呈现的原样(当您向下/向上滚动时)。