2012-12-24 6 views
10

Ich habe eine Suchleiste und Such-Display-Controller über meiner Tabellenansicht implementiert.Hide UISearchBar, bis der Benutzer scrollt?

Wenn die Ansicht die Suchleiste lädt, sind die relativen Bereiche immer sichtbar.

Gibt es eine einfache Möglichkeit, es auszublenden, bis der Benutzer nach unten scrollt, wie es in der Musik-App passiert?

Antwort

17

Sie müssen Suchleiste als Header der Tabellenansicht hinzuzufügen, und legen Sie dann die contentoffset Eigenschaft der Tabellenansicht in viewDidLoad wie

[self.tableView setContentOffset:CGPointMake(0,44) animated:YES];//or (0, 88) depends on the height of it 

Für die Suche Display-Controller, können Sie dies auch versuchen,

[self.searchDisplayController setActive:NO animated:YES]; 
+1

Einstellung der Inhalt gut funktioniert Offset funktioniert gut, danke! – kain

+3

Die Lösung blendet die Suchleiste nicht aus, wenn alle Zeilen in der Tabelle auf den Bildschirm passen. Alle bekannten Problemumgehungen für diese Art von Szenario? – Zorayr

+0

@Zorayr: Haben Sie eine funktionierende Lösung für Tabellen gefunden, wo die Zellen in den gesamten Bildschirm passen? Das gleiche Problem haben. –

11

ein anderer Ansatz ohne hard

[self.tableView setContentOffset:CGPointMake(0.0, self.tableView.tableHeaderView.frame.size.height) animated:YES]; 
+0

Dies funktioniert perfekt. Super Job Codercat! –

0

für iOS 7 und mit UINavigationController

[self.tableView setContentOffset:CGPointMake(0, self.searchBar.height + self.navigationController.navigationBar.height)]; 
0

Der beste Weg, tat i Reload Tableview in

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES];  
    [self performSelector:@selector(reload:) withObject:nil afterDelay:0.0]; 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 

- (void)reload:(__unused id)sender { 
     [self.searchDisplayController setActive:YES]; 
     [self.tableView reloadData]; 
     [self.refreshControl endRefreshing]; 
    } else { 
     [self.refreshControl endRefreshing]; 
     [[[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show]; 
    } 
} 

Dank

7

Nach ein paar Stunden von den Haaren ziehen, etwas, das

  • auf iOS funktioniert 9
  • hängt nicht von der Anzahl der Zeilen in der Tabelle
  • mit variabler Höhe Reihen

    die searchbar Unter Berücksichtigung der tableView.tableHeaderView

    @interface MyTableViewController() 
    
    @property (nonatomic, assign) BOOL firstLayout; 
    
    @end 
    
    - (void) viewDidLoad { 
    [super viewDidLoad]; 
    
    
    self.firstLayout = YES; 
    //your code 
    
    } 
    
    -(void)viewDidLayoutSubviews{ 
    
    [super viewDidLayoutSubviews]; 
    
    if(self.firstLayout){ 
    CGPoint offset = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height - self.tableView.contentInset.top); 
    [self.tableView setContentOffset:offset]; 
    
        self.firstLayout = NO; 
    
    } 
    
    } 
    
+0

große +1 für die Gründlichkeit. – Jake

0

Diese auf iOS9 +

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.tableView.contentOffset = CGPointMake(0, -20); 
    }); 
}