当搜索栏具有焦点时,UISearchController不会荣获隐藏状态栏

时间:2015-06-25 05:35:29

标签: ios objective-c uikit uisearchbar uisearchcontroller

我的应用程序通过plist条目隐藏了状态栏+ appdelegate中的这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  [application setStatusBarHidden:YES];  

加载视图后,状态栏将被隐藏。只要我点击并将焦点放在搜索栏上,状态栏就会显示出来。当搜索栏失去焦点时,状态栏会再次消失。

当搜索栏有焦点时,如何防止状态栏出现?

2 个答案:

答案 0 :(得分:3)

发生在我身上!! 我在info.plist中有“状态栏最初隐藏”,还有func(在我的情况下是swift):

override func prefersStatusBarHidden() -> Bool {
    return true;
}

但是当我点击搜索栏时,状态栏就会显示为ZJones所说的。

我在info.plist中添加了以下条目:

  

“查看基于控制器的状态栏外观”为“否”

容易但很难找到!!

来自Apple文档:

  

iOS 7为视图控制器提供了调整样式的能力   应用程序运行时的状态栏。改变状态的好方法   动态栏式是实现preferredStatusBarStyle   和 - 在动画块中 - 更新状态栏外观和   call setNeedsStatusBarAppearanceUpdate。

     

请注意

     

如果您希望选择不让视图控制器调整状态   bar样式 - 而是使用。设置状态栏样式   UIApplicationstatusBarStyle方法 - 添加   UIViewControllerBasedStatusBar应用程序的Info.plist的外观键   文件,并给它值NO。

我希望它适合你!

答案 1 :(得分:3)

当在父控制器上点击搜索栏时,对如何呈现(隐藏/显示)状态栏的控制将被提供给搜索控制器。

设置"查看基于控制器的状态栏外观"在info.plist中为NO工作到一定程度,防止在点击搜索时出现状态栏,尽管这样状态栏也不会出现在其他视图控制器上;不受欢迎的行为。

相反,我认为对UISearchController子类更加准确,并在那里覆盖prefersStatusBarHidden方法。 (我还保留了#34;查看基于控制器的状态栏外观"在info.plist中设置为YES。)

所以:

@implementation MySearchController

// Override so it does not show the status bar when active
- (BOOL)prefersStatusBarHidden {
     return YES;
}    
...
@end

在呈现控制器内:

_searchController = [[MySearchController alloc] initWithSearchResultsController:nil];