2014-07-17 17 views
7

Ich füge Suchleiste auf Tabellenkopf und floating es in scrollViewDidScroll Methode, aber wenn ich ohne Klick auf Suchleiste scrollen (dh ich gehe zur Ansicht und scrollen) dann Suchleiste nicht oben bleiben, aber es blättern up mit Tisch aber sobald ich auf Suchleiste klicken und auf Suchleiste Löschtaste klicken und dann, wenn ich die Tabelle blättern, Suchleiste bleibt top.here ist mein Code-iOS Fix Suchleiste oben auf dem UITableViewController?

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    searchBar.delegate = self; 

    searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 
    searchDisplayController.delegate = self; 
    searchDisplayController.searchResultsDataSource = self; 
    searchDisplayController.searchResultsDelegate = self; 

    UIView *tableHeaderView = [[UIView alloc] initWithFrame:searchDisplayController.searchBar.frame]; 
    [tableHeaderView addSubview:searchDisplayController.searchBar]; 
    [tableView setTableHeaderView:tableHeaderView]; 

    isSearching = NO; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    UISearchBar *searchBar = searchDisplayController.searchBar; 
    CGRect searchBarFrame = searchBar.frame; 

    if (isSearching) { 
     searchBarFrame.origin.y = 0; 
    } else { 
     searchBarFrame.origin.y = MAX(0, scrollView.contentOffset.y + scrollView.contentInset.top); 
    } 

    searchDisplayController.searchBar.frame = searchBarFrame; 
} 

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { 
    isSearching = YES; 
} 

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller { 
    isSearching = NO; 
} 

Bitte beachte, dass ich verwende UITableViewController Unterklasse und möchte nicht in UIViewController ändern. Jede Hilfe wäre willkommen.

Edit: ich auch Abschnittsheader in diesem UITableViewController Verwendung in anderen UITableViewController keine Header-Abschnitt ist und dieser Code arbeitet fine.Is dies ein Problem mit Abschnittskopf und Tabellenkopf zusammen?

+0

sollten Sie versuchen, es zum Abschnitt Header –

+0

hinzufügen, überprüfen Sie bitte meine Frage bearbeitet. – Bharat

+0

Der TableHeader verschwindet beim Scrollen vom Bildschirm, der Section Header verlässt den Bildschirm nur beim Scrollen und Sie kommen zum nächsten Abschnitt. Wenn Sie nur 1 Abschnitt haben, ist der beste Weg, die searchBar innerhalb des Abschnitts Header hinzuzufügen, sonst können Sie es nicht innerhalb des UItableViewController tun. –

Antwort

15

Der Grund, warum Ihre Suchleiste mit dem Tabelleninhalt scrollt, besteht darin, dass Sie sie direkt in die Tabelle eingefügt haben, wodurch sie zu einem untergeordneten Headerbereich der Tabelle wird. und dieser Abschnitt IMMER scrollt ...

Hier ist, wie dies erreicht werden kann. Und es ist eigentlich ganz einfach. (Das folgende Beispiel basiert auf Storyboard, aber der Mechanismus ist das gleiche, was auch immer Sie verwenden):

1) Verwenden Sie ein Uiviewcontroller und NICHT ein UITableViewController

2) hinzufügen UITableView als Kind der MutterUIView

3) A dd eine UISearchBarController auch als Kind Blick auf die UIView, nicht als Kind des UITableView (UITableView und UISearchController sind Geschwister)

sollten Sie das folgende Layout haben:

enter image description here

EDIT: Die wichtige Sache zu erinnern ist, setzen Sie die UISearchBarControllerÜBER das Geschwister UITableView. Ansonsten können Sie die UITableViewÜberlappung sehen die UISearchBarController wenn letztere fokussiert ist.

EDIT 2: BTW, wenn Sie Autolayout verwenden, erinnere mich an die TOP Einschränkung des Tableview in Bezug auf die SearchBar zu setzen ...

Run sie und bewundern Sie das Ergebnis.

Hoffe, das hilft.

+0

Großartig, Hilfe voll – RaviJSS

2

Es gibt keine Möglichkeit, den Header eines Tableview zu halten festen

1- eine UIViewController statt UITableViewController nutzen könnten.

2- Subview (UIView) für Header hinzufügen.

3- und fügen Sie eine weitere Unteransicht für die Tabellenansicht hinzu.

Verwandte Themen