【问题标题】:iOS 7 UISearchDisplayController search bar disappearsiOS 7 UISearchDisplayController 搜索栏消失
【发布时间】:2013-09-30 03:21:42
【问题描述】:

我最近在更新我的应用时遇到了这个问题。当我开始在搜索栏中输入时,搜索栏消失了,我只能看到表格视图。我仍然可以继续输入,并且表格视图会更新,但我看不到搜索栏。 相同的设置在 iOS 上运行良好

知道为什么会这样吗?

【问题讨论】:

  • 实际上我通过将搜索栏放在表格视图中然后隐藏导航控制器来修复它。

标签: ios7 uisearchdisplaycontroller iso


【解决方案1】:

尝试调整 searchResultsTableView 框架的大小

-(void)searchDisplayController:(UISearchDisplayController *)controller 
 didShowSearchResultsTableView:(UITableView *)tableView

【讨论】:

    【解决方案2】:

    有点晚了,但我最近遇到了同样的问题。我希望搜索栏在所有搜索过程中都可见并处于活动状态,因此覆盖它的暗淡视图是一个大问题。对我来说,唯一有效的是更改暗视图的框架(显然它与更改 searchResultsTableView 的框架不同)。 我已经设法用下面的代码做到了:

    -(void)setCorrectFrames
    {
        // Here we set the frame to avoid overlay
        CGRect searchDisplayerFrame = self.searchDisplayController.searchResultsTableView.superview.frame;
        searchDisplayerFrame.origin.y = CGRectGetMaxY(self.searchDisplayController.searchBar.frame);
        searchDisplayerFrame.size.height -= searchDisplayerFrame.origin.y;
        self.searchDisplayController.searchResultsTableView.superview.frame = searchDisplayerFrame;    
    }
    
    -(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
    {
        [self setCorrectFrames];
    }
    
    -(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
    {
        [self setCorrectFrames];
    }
    

    【讨论】:

    • self.searchDisplayController.searchResultsTableView.backgroundColor = [UIColor clearColor];可以帮助您查看搜索栏是否隐藏在 searchDisplayController
    • @Tihi 它工作得很好,但是当我点击搜索栏时,tableview 的第一行隐藏在搜索栏后面..
    【解决方案3】:
    -(void)setCorrectSearchBarFrames
    {
        //INFO: Here we set the frame to avoid overlay
        CGRect searchDisplayerFrame = self.searchDisplayController.searchResultsTableView.frame;
        searchDisplayerFrame.origin.y = 40.0;
        searchDisplayerFrame.size.height -= 40.0;
        self.searchDisplayController.searchResultsTableView.frame = searchDisplayerFrame;
    }
    

    谢谢蒂希。 如果我使用这段代码,搜索栏就会回来!!

    玩得开心,希望对你有帮助。

    【讨论】:

      【解决方案4】:

      我几乎精神崩溃,因为我无法在我的新应用项目中显示搜索栏。搜索栏没有显示在导航控制器中,尽管我做了以下操作:

      1) 将“搜索栏和搜索显示控制器”组件添加到我的故事板视图控制器(在视图下方的栏中,而不是视图中)

      2)在viewDidLoad中,调用“self.searchDisplayController.displaysSearchBarInNavigationBar = YES;”

      唯一发生的事情是我得到了一个标有搜索的标签 (!)。

      经过长时间的挣扎后,我创建了一个新项目并开始逐步重建无法工作的项目。我从故事板开始……现在搜索栏 DID 显示。然后,我添加了诸如 Google Analytics 之类的库、外部组件等。直到该项目与那个不起作用的项目相同……现在问题又回来了!没有搜索栏!

      当我开始删除东西时,我终于发现这是一个名为 UISearchBar+SearchField 的类别代码文件(我没有提到,但在项目中),它定义了一个只读属性。

      .h 文件如下所示:

      @interface UISearchBar (SearchField2)
      
      @property (nonatomic, readonly) UITextField *searchField;
      
      @end
      

      .m 文件看起来像这样

      #import "UISearchBar+SearchField.h"
      
      @implementation UISearchBar (SearchField)
      
      - (UITextField *)searchField {
          NSUInteger subViewCount = [self.subviews count];
          for (int i = 0; i < subViewCount; i++) {
              if ([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
                  return [self.subviews objectAtIndex:i];
              }
          }
          return nil;
      }
      
      @end
      

      我删除或重命名此属性后,一切都开始工作了。

      这非常(!)特定于我的疯狂奇怪的问题,但也许它可以帮助某人。

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        相关资源
        最近更新 更多