iOS 7 UISearchDisplayController搜索栏消失

时间:2013-09-24 18:45:16

标签: ios7 uisearchdisplaycontroller iso

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

知道为什么会这样吗?

Step 1 Step 2 Step 3

4 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:3)

尝试在

上调整searchResultsTableView框架的大小
-(void)searchDisplayController:(UISearchDisplayController *)controller 
 didShowSearchResultsTableView:(UITableView *)tableView

答案 2 :(得分: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;
}

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

玩得开心,我希望它可以帮到你。

答案 3 :(得分:1)

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

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

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

唯一发生的事情是我有一个标签(!),上面写着搜索。

经过一段时间的挣扎之后,我创建了一个新项目并开始逐件重建非工作时间。我从故事板开始......现在搜索栏显示DID。然后我添加了像谷歌分析,外部组件等库。直到项目与那个不起作用的项目相同...现在问题又回来了!没有搜索栏!

当我开始删除内容时,我终于发现它是一个类别代码文件(我没有引用,但是在项目中),它被称为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

我删除或重命名此属性后,一切都开始有效。

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