SearchDisplayController的searchResultsTableView未显示

时间:2014-08-09 22:17:15

标签: ios uitableview uisearchbar uisearchdisplaycontroller

我将搜索栏添加到navigationItem的titleView,以便它看起来像这样。

SearchBar in titleView of navigationItem

但是当我点击搜索栏以获得焦点时,它会移出屏幕并自动关闭键盘,然后它看起来像这样。

searchbar out of screen

所以,我既不能输入任何内容,也不能看到任何结果。

这是我的代码,我将搜索栏添加到viewDidLoad方法中的导航项。

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0.0, 320.0, 44.0)];
self.searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
UIView *searchBarView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 310.0, 44.0)];
[self.searchBar setShowsCancelButton:NO animated:NO];
searchBarView.autoresizingMask = 0;


self.headSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
self.headSearchDisplayController.delegate = self;
self.headSearchDisplayController.searchResultsDelegate = self;


self.headSearchDisplayController.searchResultsDataSource = self;
[searchBarView addSubview:self.searchBar];
self.searchBar.delegate = self;

self.navigationItem.titleView =searchBarView;

我在没有设置autoresizingmask的情况下尝试了它,没有任何成功。我得到一个暗示,这种行为正在发生,因为搜索栏位于44个视图中,它再次位于titleView内。我猜测searchResultsTableView没有足够的高度可见,因此我们只能看到叠加层。我该如何解决这个问题?指向正确方向的指针将非常有用。

这是一个动画GIF的情况。 enter image description here

1 个答案:

答案 0 :(得分:0)

我发现当搜索被聚焦时,导航栏通常被推高,并且由于搜索栏位于导航栏中,因此它被推高,并且无法在屏幕上显示。

我通过继承UISearchDisplayController来隐藏navigationBar来解决这个问题。这是代码。

#import "CustomSearchDisplayController.h"

@implementation CustomSearchDisplayController

- (void)setActive:(BOOL)visible animated:(BOOL)animated 
{
    if(self.active == visible) return;
    [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
    [super setActive:visible animated:animated];
    [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
    if (visible) {
        [self.searchBar becomeFirstResponder];
    } else {
        [self.searchBar resignFirstResponder];
    }
}
@end

在此处找到此答案:https://stackoverflow.com/a/3257456/1011042