我有一个UISearchBar和UISearchDisplayController,一切都很好但我的范围选择器显示在文本字段旁边而不是在它下面。我知道这是设备在横向时的预期操作,但由于我在UISplitViewController的主视图中有UISearchBar,它最终看起来像这样:
有没有办法强制范围栏显示在所有界面方向的文本字段下面(我知道这在iPad上的Mail.app中很好用,所以可能,但是谁知道Apple是否决定隐藏这样做的选项)
答案 0 :(得分:3)
这不是公共API的一部分。希望它将来会被添加。它可以使用私有API来完成,查看UIKit类转储将帮助您。
祝你好运!编辑:请注意,使用私有API可能会让您从应用商店中被拒绝,就像大多数人已经知道的那样。
答案 1 :(得分:2)
我使用UISearchDisplayDelegate来显示和隐藏范围栏。
-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:YES];
}
-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:NO];
}
答案 2 :(得分:1)
不要使用私有API。相反,请遵循IOS用户界面指南中的Apple建议:
当存在搜索栏时,可在其附近显示范围栏。该 范围栏显示在搜索栏下方,无论方向如何, 除非您在代码中使用搜索显示控制器(更多信息) 有关其工作方式的信息,请参阅UISearchDisplayController类 参考)。使用搜索显示控制器时,范围栏为 显示在搜索栏右侧的搜索栏中 设备处于横向(纵向,是 在搜索栏下方。)
这对我使用故事板很有用。
答案 3 :(得分:0)
为什么不以编程方式设置搜索栏?这是我在当前项目中使用的内容。它会隐藏搜索栏,直到用户向上滚动,并且当他们开始键入项目时,范围栏将加载到文本字段下方。从那里开始像往常一样过滤:
- (void)setupSearchBar {
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
self.searchBar.showsScopeBar = YES;
self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Users", @"Groups", nil];
self.tableView.tableHeaderView = self.searchBar;
CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height);
self.tableView.contentOffset = offset;
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
contentsController:self];
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.searchController.delegate = self;
}
在viewDidLoad中调用[self setupSearchBar];
即可参加比赛。