我的UINavigationItem与UISearchController相关联的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
答案 0 :(得分:4)
我遇到了同样的问题,我解决了两个方面:
首先,您可以将searchStyle置于Prominent:
searchController.searchBar.searchBarStyle = .Prominent
顺便说一下,我在Swift中写过,这个解决方案的问题是搜索图标和文本,占位符颜色较深,如果背景颜色较深,看起来很糟糕。
我发现的第二个解决方案是:
navigationController!.navigationBar.translucent=false
navigationController!.navigationBar.barTintColor=UIColor.redColor()
searchController.searchBar.barTintColor=UIColor.redColor()
searchController.searchBar.searchBarStyle = .Prominent
searchController.searchBar.translucent=false
关键是导航栏和搜索栏都不是半透明的,两者都有相同的颜色。
我希望这有助于你
答案 1 :(得分:4)
对于我来说,使用searchBar闪烁的情况是由于在searchBar设置期间没有设置backgroundImage引起的。
夫特:
searchBar.backgroundImage = UIImage()
答案 2 :(得分:0)
@omarzl的答案对我没有用......但我发现了一些解决方法。我在这里发布它作为答案,所以也许它会帮助别人。
它很简单,用Swift 3.0编写。
为了避免来自UISearchBar的奇怪闪光,我只是在视图消失时隐藏它:
override func viewWillDisappear(_ animated: Bool) {
searchBars.isHidden = true
}
...并在视图重新出现时再次显示:
override func viewDidAppear(_ animated: Bool) {
self.searchBars.isHidden = false
}
我知道这不是一个真正的解决方案,而是一个&#34;解决方法&#34;。但是,它可以使你的应用程序比拥有这个有缺陷的UISearBar更漂亮。