为什么UISearchBar在导航时似乎有一个奇怪的闪光?

Bil*_*oto 9 objective-c uisearchbar uisearchcontroller

我在与UISearchController关联的UINavigationItem的titleView中有一个UISearchBar.当我向后导航时,它似乎闪烁.有人见过这个吗?

闪电的视频

@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
Run Code Online (Sandbox Code Playgroud)

小智 4

我遇到了同样的问题,我通过两种方式解决了:

首先,您可以将 searchStyle 设置为 Prominent:

searchController.searchBar.searchBarStyle = .Prominent
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我是用 Swift 编写的,这个解决方案的问题是搜索图标和文本以及占位符的颜色较深,如果背景颜色较深,看起来会很糟糕。

我找到的第二个解决方案是这样的:

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

 searchController.searchBar.barTintColor=UIColor.redColor()
 searchController.searchBar.searchBarStyle = .Prominent
 searchController.searchBar.translucent=false
Run Code Online (Sandbox Code Playgroud)

关键是导航栏和搜索栏都不是半透明的,并且两者具有相同的颜色。

我希望这可以帮助你

  • 谢谢,@Omzarzi!对我来说关键是这个:`_searchController.searchBar.barTintColor= [HN_APP_DELEGATEbrandColor];` (2认同)