搜索期间关闭键盘时的顶部栏颜色

Posted

技术标签:

【中文标题】搜索期间关闭键盘时的顶部栏颜色【英文标题】:Top bar color when keyboard is dismissed during search 【发布时间】:2013-11-18 22:50:05 【问题描述】:

我的应用中顶部栏颜色较浅,因为导航栏是深棕色:

当我点击搜索(此处为 Keresés)时,以下代码将顶部栏颜色设置为深色内容:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];


- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

所以它看起来像这样:

但是,当我在字段中输入内容,然后滚动结果列表时,键盘消失,顶部栏恢复为白色。我怎样才能防止这种情况发生?

【问题讨论】:

【参考方案1】:

ios 7 中,状态栏样式默认由UIViewController 方法-preferredStatusBarStyle 的返回值决定。此方法的默认实现返回UIStatusBarStyleDefault

将 info.plist 键 UIViewControllerBasedStatusBarAppearance 设置为 NO 的值返回到 iOS 7 之前的样式,即从共享的 UIApplication 对象中获取状态栏外观

要解决此问题,您有两种选择:

1) 在所有希望状态栏样式为非默认样式的视图控制器中实现 -preferredStatusBarStyle 方法

2) 将键“查看基于控制器的状态栏外观”(UIViewControllerBasedStatusBarAppearance) 添加到您的 info.plist 文件中,并将其值设置为 NO

【讨论】:

感谢您的评论。正确的方法肯定是这个。你的指示很清楚,但不幸的是它们对我不起作用。如果我将UIViewControllerBasedStatusBarAppearance 设置为YES,则会调用-preferredStatusBarStyle,但这仅在我点击搜索时才会发生。视图控制器在创建时不会询问此方法。 setNeedsStatusBarAppearanceUpdate 也无济于事。如果我设置NO,那么-preferredStatusBarStyle 根本不会被调用。【参考方案2】:

解决方案在此评论中:https://***.com/a/19513714/511878

总结:UINavigationController 不会将-preferredStatusBarStyle 转发给它的孩子。

【讨论】:

以上是关于搜索期间关闭键盘时的顶部栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

隐藏导航栏时的假状态栏颜色

无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色

iOS7 键盘返回/完成/搜索色调颜色

Android如何设置顶部状态栏颜色(主题)

更改导航栏 Swift 顶部的颜色

表格 iPhone 在顶部更改颜色