我将搜索栏添加到navigationItem的titleView,以便它看起来像这样。
但是当我点击搜索栏以获得焦点时,它会移出屏幕并自动关闭键盘,然后它看起来像这样。
所以,我既不能输入任何内容,也不能看到任何结果。
这是我的代码,我将搜索栏添加到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的情况。
答案 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