2011-11-03 9 views
7

ktoś wie, jak zmienić rozmiar przyciemnionej czerni nadmiernie, po kliknięciu paska wyszukiwania?zmiana rozmiaru UISearchDisplayController przyciemniona czarna nakładka

Mam problem, gdy kliknąłem anulowany widok tabeli wyda następnie animowany, aby zniknąć.

Używam tego do zmiany mojego tableview wyniku.

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    tableView.frame =fTableView.frame;//CGRectMake(26, 100, 280, 310); //fTableView.frame; 
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1]; 
} 

po kliknięciu paska wyszukiwania, szara nakładka jest pełna zamiast zdefiniowanego rozmiaru. przycisk

enter image description here

enter image description here

po kliknięciu anulować, widok będzie wydatkować powrotem. enter image description here

+1

ta odpowiedź od Toma Swift rozwiązał mój problem: http://stackoverflow.com/a/4128659/675486 –

Odpowiedz

1

Myślałem, że searchDisplayController ma oddzielne tableview, więc domyślam się, że trzeba zmienić rozmiar tego.

Coś wzdłuż linii: <yourSearchViewController>.view.frame =self.tableView.frame;

lub jeśli nie masz go jako zmienną klasy, w sposób, który odbiera je jako argument, np

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    controller.view.frame = self.tableView.frame; 
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1]; 
} 

Alternativily może chcesz podklasuj go i nadpisaj jego właściwości widoku lokalnie.

Mam nadzieję, że to pomoże!

+0

Nie ma nic g jak 'view' w' UISearchDisplayController'. Twoje rozwiązanie powoduje błąd. – thesummersign

+0

To było wskazanie tego, czego powinieneś szukać.Jeśli spędzisz kilka minut dłużej patrząc na właściwości kontrolerów, zauważysz, że ma on określony widok pod nazwą "searchResultsTableView". źródło: http://developer.apple.com/library/ios/#documentation/uikit/reference/UISearchDisplayController_Class/Reference/Reference.html – Wolfert

+0

Przeszedłem przez plik '.h' kontrolera i znalazłem' UIView * _view', ale wydaje się, że nie jest narażony. – thesummersign

0

Posiada własny widok tabeli, który nie jest tak łatwy do poskromienia. Natknąłem się na coś takiego i nadal szukam lepszego rozwiązania.

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
    [controller.searchResultsTableView setDelegate:self]; 
    CGFloat gr = 12.0; 
    controller.searchResultsTableView.backgroundColor = [UIColor colorWithRed:gr green:gr blue:gr alpha:0.0]; 
    [controller.searchResultsTableView setSeparatorStyle:UITableViewCellSelectionStyleNone]; 
    CGRect searchTableFrame = CGRectMake(7, 105, 305, 292); 
    [controller.searchResultsTableView setFrame:searchTableFrame]; 
} 

Powyższy kod ustawia tło jako przezroczyste, ale wydaje się, że po cichu ignoruje rozmiar ramki.

EDYCJA: ROZWIĄZANA Znalazłem solidne rozwiązanie tego here. To uratowało mi życie.

+0

Użyłem również niestandardowych komórek, które kpią z wyglądu tak, jakby pasowały do ​​wymaganej szerokości. – thesummersign

10

Połączyłem kilka odpowiedzi, aby przesunąć ramkę nakładki przyciemnionej.

1: przesłonić UISearchDisplayController klasę

@interface MySearchController : UISearchDisplayController 

2: przesłonić setActive funkcja

- (void)setActive:(BOOL)visible animated:(BOOL)animated 
{ 
[super setActive: visible animated: animated]; 

//move the dimming part down 
for (UIView *subview in self.searchContentsController.view.subviews) { 
    //NSLog(@"%@", NSStringFromClass([subview class])); 
    if ([subview isKindOfClass:NSClassFromString(@"UISearchDisplayControllerContainerView")]) 
    { 
     CGRect frame = subview.frame; 
     frame.origin.y += 10; 
     subview.frame = frame; 
    } 
} 

} 

3: zmienić xib/storyboard Szukaj wyświetlaczu sterownika z UISearchDisplayController do MySearchController

+0

niiiice. działa dla mnie – MrTristan

+0

Użyj go, aby zmienić szerokość. DZIĘKUJĘ CI!!! – AlexanderZ

+0

To jest najlepsze rozwiązanie dla tego problemu. Dzięki! –