2012-12-24 11 views
10

Zaimplementowałem pasek wyszukiwania i kontroler wyświetlania wyszukiwania na szczycie mojego widoku tabeli.Ukryj UISearchBar do momentu przewinięcia użytkownika?

Gdy widok ładuje pasek wyszukiwania, a zakresy względne są zawsze widoczne.

Czy istnieje prosty sposób na ukrycie go, dopóki użytkownik nie przewinie w dół, tak jak dzieje się to w aplikacji Muzyka?

Odpowiedz

17

Trzeba dodać pasek wyszukiwania w nagłówku widoku tabeli, a następnie ustawić właściwość widoku tabeli contentoffset w viewDidLoad jak,

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

Dla karty graficznej wyszukiwania, można spróbować to za dobrze,

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

ustalającego treść offset działał dobrze, dzięki! – kain

+3

Rozwiązanie nie ukrywa paska wyszukiwania, gdy wszystkie wiersze w tabeli pasują do ekranu. Jakieś znane rozwiązania tego typu scenariuszy? – Zorayr

+0

@Zorayr: Czy znalazłeś działające rozwiązanie dla tabel, w których komórki pasują do całego ekranu? Mając ten sam problem. –

11

inne podejście bez hardcode

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

To działa idealnie. Świetna robota codercat! –

0

dla iOS 7 i stosując UINavigationController

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

Najlepszy sposób zrobiłem reload tableview w

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

Dzięki

7

Po kilku godzinach ciągnięcie za włosy, coś, co działa

  • na iOS 9
  • nie zależą od liczba wierszy w tabeli
  • o zmiennej wysokości wierszy

    Biorąc pod uwagę paska wyszukiwania jest 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

duży +1 za dokładność. – Jake

0

Działa to dobrze na iOS9 +

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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