2010-07-29 7 views
7

Wenn Sie eine Tabelle nach unten scrollen (Notes.app), bleibt die Suchleiste oben fixiert, aber wenn Sie eine Tabelle nach oben blättern, wird die Suchleiste ausgeblendet. Das ist, was ich will.Wie repliziert UISearchBar Scroll-Verhalten in Notes.app?

Wenn Sie den Bildlaufanzeiger betrachten, wird UISearchBar als Unteransicht der Bildlaufansicht einer Tabelle angezeigt. Wenn ich jedoch eine Suchleiste zu einer tableView im Interface Builder hinzufüge, wird sie immer wie eine normale Zeile an eine tabletView angehängt.

+0

jeder Code können wir oder Test sehen in App sind – user841836

Antwort

4

Platzieren Sie in der Tabellenansicht eine leere transparente UIView (searchBarPlaceholderView) in den tableHeaderView-Steckplatz, der genau die Abmessungen einer UISearchBar hat. Fügen Sie dann die UISearchBar (searchBar) zur Ansicht der obersten Ebene hinzu.

Dann in Ihrer Tabellenansicht delegiert, fügen

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

Das ist das Standardverhalten. Sie müssen nur die Leiste in der ersten Kopfzeile der Tabelle ablegen (ich denke, es ist der Abschnitt 0).

Allerdings habe ich gerade eine neue Anwendung mit einem UITableViewController erstellt, und über den Interface Builder habe ich die UISearchBar auf der oberen Seite der TabelleView fallen gelassen und es verhält sich genau wie die Notes.app-Anwendung.

+0

Nein, es ist nicht, zumindest für mich. Versuchen Sie, den Tisch nach unten zu ziehen - die Suchleiste folgt ihm ganz nach unten. In der Notes.App Suchleiste bleibt an der Spitze. – Indoor

+0

Oh, jetzt habe ich das. Wenn Sie sich Notes.app ansehen, scheint es, dass die Suchleiste nicht Teil der Tabelle ist, sondern so dargestellt wird, wie sie war (nur wenn Sie nach unten/oben scrollen). –

1

die Suchleiste an die Tabellenansicht in Interface Builder wie normalen hinzufügen (das ist die Suchleiste zu sagen, sollte ein Subview der Tabelle sein).

Dann diese Methode in den Delegaten implementieren:

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