我的应用中有以下代码,特别是viewDidLoad:
设置我的UISearchController
。
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = NO;
self.searchController.searchBar.scopeButtonTitles = @[];
self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
[_tableView setTableHeaderView:_searchController.searchBar];
每当调用搜索栏(添加到tableView
)时,UIStatusBar
颜色从UIStatusBarStyleLightContent
变为暗(白色变为黑色)。现在,我想出是否设置,
self.definesPresentationContext = NO;
以下内容:
self.definesPresentationContext = YES;
问题已解决,UIStatusBar
颜色被保留。但是,出现了另一个问题。将self.definesPresentationContext
设置为YES
时
,在调用时,搜索栏由于某种原因向下移动,恰好(或正确地)向下UIRefreshControl
的{{1}}底部所在的位置。
答案 0 :(得分:4)
从iOS 10开始(可能更早?),如果你有"查看基于控制器的状态栏外观"在Info.plist中设置为YES,只需在UIViewController中设置包含UISearchController的preferredStatusBarStyle。
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
(您不需要子类化或创建UISearchController的类别/扩展来覆盖preferredStatusBarStyle ...它使用您在UIViewController中设置的preferredStatusBarStyle)
答案 1 :(得分:3)
如果您希望视图控制器定义状态栏的外观,则将View-controller based status bar appearance
设置为No
不是解决方案。
我的解决方案包括两件事:
definesPresentationContext
设置为YES
extendedLayoutIncludesOpaqueBars
设置为YES
)答案 2 :(得分:1)
我需要完全控制状态栏颜色。我使用扩展名found here来确保可见视图控制器正在设置首选状态栏颜色。
因此,对我来说,必须覆盖UISearchController并覆盖preferredStatusBarStyle
并返回我想要的样式。
答案 3 :(得分:1)
如果ViewController在TabBarController中,那么 -
而不是
self.definesPresentationContext = YES;
使用 self.tabBarController.definesPresentationContext = YES;
这在上面的场景中对我有用。
答案 4 :(得分:0)
显示搜索控制器(处于活动状态)时显示的状态栏属于搜索控制器。要设置首选状态栏样式,必须向UISearchController添加一个类别,然后覆盖preferredStatusBarStyle方法。
以下是该类别的实施文件的示例:
@implementation UISearchController (Customization)
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
答案 5 :(得分:-2)
或者我们可以在Swift上编写扩展(版本2,但您可以轻松地将其翻译为3):
extension UISearchController {
override public func preferredStatusBarStyle() -> UIStatusBarStyle{
if Theme.lightTheme() {
return UIStatusBarStyle.Default
}
else {
return UIStatusBarStyle.LightContent
}
}
}
Theme
是一个规范app颜色主题的类。