2015-07-10 15 views
8

Ich habe eine UISearchBar in meinem UINavigationItem titleView mit einem UISearchController verbunden. Wenn ich zurück navigiere, scheint es zu blinken. Wer hat das schon mal gesehen?Warum scheint die UISearchBar beim Navigieren zurück zu blinken?

vid of flash

@interface HNTileSearchViewController() <HNTileSearchResultsProtocol, SWRevealViewControllerDelegate, UISearchBarDelegate, HNSetSearchFiltersProtocol, HNKeywordResultsProtocol> 
... 
@property (nonatomic, strong) UISearchController *searchController; 
@property (nonatomic, strong) UISearchBar * searchBarTop; 
... 
@end 


@implementation HNTileSearchViewController 
... 
    - (void) customPreSetup { 
     HNKeywordResultsTableViewController * searchResultsController = [self.storyboard instantiateViewControllerWithIdentifier:HNKeywordResultsTableViewControllerStoryboardIdentifier]; 
     searchResultsController.delegate = self; 
     _searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; 
     _searchController.searchResultsUpdater = searchResultsController; 
     _searchController.hidesNavigationBarDuringPresentation = NO; 
     _searchController.dimsBackgroundDuringPresentation = NO; 
     _searchBarTop = _searchController.searchBar; 
     _searchBarTop.delegate = self; 
     _searchBarTop.placeholder = NSLocalizedString(@"Search heynay", nil); 
     _searchBarTop.showsCancelButton = NO; 
     _searchBarTop.showsScopeBar = NO; 
     self.navigationItem.titleView = _searchBarTop; 
     self.definesPresentationContext = YES; 
    } 

    - (void) viewDidLoad { 
     [super viewDidLoad]; 
     [self customPreSetup]; 
     ... 
    } 
.... 
@end 

Antwort

4

hatte ich das gleiche Problem und ich löste auf zwei Arten:

Erstens können Sie die searchStyle auf Prominente setzen:

searchController.searchBar.searchBarStyle = .Prominent 

Ich schrieb es in Swift übrigens, das Problem mit dieser Lösung ist, dass das Suchsymbol und der Text und der Platzhalter eine dunklere Farbe hat und wenn der Hintergrund eine dunklere Farbe ist, sieht es schlecht aus.

Die zweite Lösung, die ich gefunden, ist dies:

navigationController!.navigationBar.translucent=false 
navigationController!.navigationBar.barTintColor=UIColor.redColor() 

searchController.searchBar.barTintColor=UIColor.redColor() 
searchController.searchBar.searchBarStyle = .Prominent 
searchController.searchBar.translucent=false 

Der Schlüssel ist, dass sowohl die Navigationsleiste und die Suchleiste nicht durchscheinend ist und dass beide die gleiche Farbe haben.

Ich hoffe, das hilft Ihnen

+2

Danke, @Omzarzi! Der Schlüssel für mich war dieser: '_searchController.searchBar.barTintColor = [HN_APP_DELEGATE brandColor];' –

0

Die Antwort von @omarzl nicht für mich arbeiten ... Aber ich fand eine wenig Abhilfe. Ich poste es hier als Antwort, vielleicht wird es jemandem helfen.

Es ist sehr einfach und in Swift 3.0 geschrieben.

So den seltsamen Blitz vom UISearchBar zu vermeiden, habe ich es nur verstecken, wenn die Ansicht verschwindet:

override func viewWillDisappear(_ animated: Bool) { 

    searchBars.isHidden = true 

} 

... und wieder sichtbar machen, wenn die Ansicht wieder angezeigt:

override func viewDidAppear(_ animated: Bool) { 

    self.searchBars.isHidden = false 

} 

Ich weiß, es ist nicht wirklich eine Lösung, sondern ein "Workaround". Es funktioniert jedoch und macht Ihre App ein wenig schöner als diese Buggy UISearBar.

3

Für mich wurde der Fall mit blinkender searchBar verursacht, indem ich nicht das backgroundImage während searchBar setup gesetzt habe.

Swift:

searchBar.backgroundImage = UIImage() 
+0

Hey, das funktioniert! –

Verwandte Themen