10

我最近正在更新我的应用程序并遇到了这个问题。当我开始在搜索栏中输入时,搜索栏消失了,我只能看到表格视图。我仍然可以继续输入,并且表格视图得到更新,但我看不到搜索栏。相同的设置适用于 iOS < 7

知道为什么会这样吗?

步骤1 第2步 第 3 步

4

4 回答 4

8

有点晚了,但我最近遇到了同样的问题。我希望搜索栏在所有搜索过程中都可见并处于活动状态,因此覆盖它的暗淡视图是一个大问题。对我来说,唯一有效的是更改暗视图的框架(显然它与更改 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];
}
于 2013-10-26T13:08:18.287 回答
3

尝试调整 searchResultsTableView 框架的大小

-(void)searchDisplayController:(UISearchDisplayController *)controller 
 didShowSearchResultsTableView:(UITableView *)tableView
于 2013-09-25T07:07:49.720 回答
1

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

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

一旦我删除或重命名了这个属性,一切都开始工作了。

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

于 2014-04-03T19:07:35.757 回答
1
-(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;
}

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

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

于 2013-10-28T19:36:59.687 回答