我有一个 UISearchBar 和 UISearchDisplayController,一切都很好,但我的范围选择器显示在文本字段旁边而不是在它下面。我知道这是设备处于横向时的预期操作,但由于我在 UISplitViewController 的主视图中有 UISearchBar,它最终看起来像这样:
有没有办法强制范围栏在所有界面方向的文本字段下方显示(我知道这在 iPad 上的 Mail.app 中效果很好,所以它可能,但谁知道 Apple 是否决定隐藏选项所以)
我有一个 UISearchBar 和 UISearchDisplayController,一切都很好,但我的范围选择器显示在文本字段旁边而不是在它下面。我知道这是设备处于横向时的预期操作,但由于我在 UISplitViewController 的主视图中有 UISearchBar,它最终看起来像这样:
有没有办法强制范围栏在所有界面方向的文本字段下方显示(我知道这在 iPad 上的 Mail.app 中效果很好,所以它可能,但谁知道 Apple 是否决定隐藏选项所以)
这不是公共 API 的一部分。希望将来会添加。它可以使用私有 API 来完成,查看 UIKit 类转储将对您有所帮助。
祝你好运!
编辑:请注意,正如大多数人已经知道的那样,使用私有 API 可能会让您被应用商店拒绝。
我使用 UISearchDisplayDelegate 来显示和隐藏范围栏。
-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:YES];
}
-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:NO];
}
不要使用私有 API。相反,请遵循 Apple 在 IOS 用户界面指南中的建议:
当存在搜索栏时,其附近会出现一个范围栏。无论方向如何,范围栏都会显示在搜索栏下方,除非您在代码中使用搜索显示控制器(有关其工作方式的更多信息,请参阅 UISearchDisplayController 类参考)。当您使用搜索显示控制器时,当设备处于横向(纵向,它位于搜索栏下方)时,范围栏会显示在搜索栏右侧的搜索栏中。
这对我使用故事板很有用。
为什么不以编程方式设置搜索栏?这是我在当前项目中使用的。它会隐藏搜索栏,直到用户向上滚动,并且当他们开始输入项目时,范围栏会加载到文本字段下方。从那里像往常一样过滤:
- (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;
}
打电话给[self setupSearchBar];
viewDidLoad 你要参加比赛了。