我正在尝试使用Apple的最新UISearchController实现一个简单的搜索栏。但是,如果我使用搜索栏的范围栏来获取过滤器选项,我似乎无法正常工作。
范围栏始终显示,我可以忍受
但是在第一次触摸事件中,搜索栏和示波器条重叠。
我使用过Apple的TableView示例代码应用程序,但它没有改变任何内容。
- (void)viewDidLoad {
[super viewDidLoad];
_resultsTableController = [[APLResultsTableController alloc] init];
_searchController = [[UISearchController alloc] initWithSearchResultsController:self.resultsTableController];
self.searchController.searchResultsUpdater = self;
[self.searchController.searchBar sizeToFit];
self.searchController.searchBar.showsScopeBar = YES;
[self.searchController.searchBar setScopeButtonTitles:@[@"First",@"Second"]];
self.tableView.tableHeaderView = self.searchController.searchBar;
// we want to be the delegate for our filtered table so didSelectRowAtIndexPath is called for both tables
self.resultsTableController.tableView.delegate = self;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES
self.searchController.searchBar.delegate = self; // so we can monitor text changes + others
// Search is now just presenting a view controller. As such, normal view controller
// presentation semantics apply. Namely that presentation will walk up the view controller
// hierarchy until it finds the root view controller or one that defines a presentation context.
//
self.definesPresentationContext = YES; // know where you want UISearchController to be displayed
}
我也实现了搜索栏的委托方法,但它只是切换了重叠的时间。
是否有人能够使用iOS 8s UISearchController并使用searchBar的范围栏实现搜索栏?
提前致谢
答案 0 :(得分:2)
我花了三天时间处理同一个问题,通过我能找到的所有帖子,最后在Apple Dev论坛上找到了解决方案,所以我想发布一个更新来帮助下一个遇到这个问题的人。
解决方法是确保属于UISearchController的搜索栏上的showsScopeBar属性设置为false,即Swift中的UISearchController.searchBar.showsScopeBar = false
。
问题似乎是Apple的设计意图是将showsScopeBar
属性与独立搜索栏一起使用,而不是由UISearchController控制的搜索栏。不幸的是,在课程文档中没有提到这一点。在我看来,糟糕的设计决定,但它就是它。
讨论在以下主题 https://devforums.apple.com/thread/235803 (截至2018-01-26的死链接)。
祝你好运。
答案 1 :(得分:1)
这似乎是一个已知的缺陷。有几个radr条目,例如http://www.openradar.me/20702394引用类似的问题,并使用sizeToFit()
来解决方法他们建议的解决方法有效,但只有在viewDidLayoutSubviews中应用时才有效。即在所有意见都已列出之后。
$("#formId").serialize()
答案 2 :(得分:1)
更新swift 3:
searchController.searchBar.showsScopeBar = false
更新swift 4:
似乎在swift 4和ios 11中,搜索栏发生了变化。使用上面显示的方法,在某些情况下,范围栏将位于搜索栏内。
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
tableView.tableHeaderView = searchController.searchBar
}
这为我修好了。如果ios 10可用,我使用上面显示的表格。如果ios 11可用,我将更改我的技术并将导航视图控制器设置为搜索控制器。你会发现它看起来与ios 10完全一样