2016-04-06 11 views
1

Suche Ich habe ein UIView, in dem ich ein UISearchBar und ein UIButton unten platziert haben sind die Screenshots, die das Problem erläutert: This is how it appears when I first run the app
^Dies ist, wie es erscheint, wenn ich zum ersten Mal ausgeführt die App This is how it gets when I want to enter the text
^Dies ist, wie es nur geht, wenn ich den Text eingeben möchten Finally this is the size it gets after I end the search
^Schließlich ist dies die Größe wird es, nachdem ich die Suche
Ende
der wichtigste Punkt hier ist, dass ich nicht UINavigationBar bin mit den rot ist ein UIView. Ich habe nichts für die UI programmiert, ich habe es einfach in die .xib gelegt und über autoResizing eingestellt. Sie nur das, was ich für UISearchBar schrieb, war [_searchBarTop setBackgroundImage:[UIImage new]];, die nur war, um das Hintergrundbild zu verschwinden.
Ich habe versucht,self.searchBarTop.clipsToBounds = YES; und diesesearchDisplayControllerWillEndSearch geht aus dem UIView wenn Ende

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
    { 
     self.searchDisplayController.searchBar.translatesAutoresizingMaskIntoConstraints = YES; 
     [self.searchDisplayController setActive:NO animated:YES]; 
    } 

Ich verwende searchdisplaycontroller und verwenden möchten, dass Aber es ist immer noch das gleiche. Irgendwelche Vorschläge?

Antwort

1

Wenn Sie eine einfache UISearchBar in einerverwenden, müssen Sie nicht UISearchController per sè verwenden. Sie können einfach UISearchBar und die entsprechenden Delegierten verwenden.

Wie bei der Größenanpassung, ich denke, Sie haben die Autoresizing bei flexibler Breite, während Sie statische Breite benötigen, mit statischen Seiten. Wenden Sie dies sowohl auf Ihre UIView als auch auf das eingebettete UISearchBar an. Das sollte dein Problem beheben. Lassen Sie mich wissen, ob das Problem weiterhin besteht.

Wenn der automatischen Größen nicht funktioniert, können Sie es einfach so zurückdrängen:

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    CGRect frame = self.searchBarTop.frame; 
    frame.origin.x = 33; 
    frame.size.width = self.view.frame.size.width - 41; 

    [UIView animateWithDuration:0.5 animations:^{ 
     self.searchBarTop.frame = frame; 
    }]; 
}); 
} 
1

UISearchDisplayController wurde in iOS 8.0 zum ersten Mal eingestellt, ebenso wie UISearchDisplayDelegate. Sie sollten UISearchController stattdessen seinen Delegaten, UISearchControllerDelegate und seine searchBar-Eigenschaft verwenden.

EDIT - In Beispiel

// your class needs to conform to the following protocols 

<UISearchResultsUpdating, UISearchControllerDelegate> 
// define property for your search controller 
@property (nonatomic) UISearchController *mySearchController; 

// instantiate the search controller - in viewDidLoad should work 
// if you want to handle results manually the searchResultsController can be nil, or you can set it to 

self.mySearchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 
[self.mySearchController.searchBar sizeToFit]; 
self.mySearchController.searchResultsUpdater = self; 
self.mySearchController.delegate = self; 
self.mySearchController.dimsBackgroundDuringPresentation = NO; 

// add the searcher to a properly constrained "Container" or "wrapper" UIView 
[self.containerView addSubView:self.mySearchController.searchBar]; 
[self.mySearchController.searchBar sizeToFit]; 
self.definesPresentationContext = YES; 

Sie dann auf die Eingabe in der Suchleiste durch die Umsetzung der UISearchResultsUpdating Protokolls erforderlichen Verfahren reagieren können:

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{ 
     NSString *text = searchController.searchBar.text; 
     /// do whatever you need to with the text typed in to the search bar 
} 

Und schließlich lesen immer Apple's documentation

+0

können Sie ein Beispiel teilen? –

Verwandte Themen