我有一个自定义UITableViewController
UISearchController
设置为tableHeaderView
,如下viewDidLoad()
内所示:
definesPresentationContext = true
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
if #available(iOS 9.1, *) {
searchController.obscuresBackgroundDuringPresentation = false
}
searchController.searchBar.barStyle = .Black
searchController.searchBar.searchBarStyle = .Default
searchController.searchBar.keyboardAppearance = .Dark
searchController.searchBar.scopeButtonTitles = ["Title 1", "Title 2", "Title 3", "Title 3", "Title 3", "Title 3"]
tableView.tableHeaderView = searchController.searchBar
首次加载UITableViewController时,搜索栏下方会显示范围栏并获取整个宽度:
点击取消后,搜索栏会正确显示,下方没有范围栏,但搜索栏上的后续触摸仍会显示旁边的范围栏:
我尝试过以下方法:
sizeToFit()
和searchBar
上呼叫tableHeaderView
,在viewDidLoad()和viewWillAppear()中尝试searchBar
tableHeaderView
和viewWillAppear()
的框架高度设置为88
到目前为止,没有任何东西对外观或行为产生任何影响。我希望搜索栏下方的范围栏,并且它最初不会出现在搜索栏的后面。是UISearchController
被破坏了还是我只是在做一些愚蠢的事情。
答案 0 :(得分:1)
这是UISearchBar中的一个错误,你应该为它创建一个雷达。
解决方法是在设置scopeButtonTitles之后添加一些代码:
UIView *scopeBarContainer = [[[searchController.searchBar.subviews firstObject] subviews] firstObject];
for ( UIView *view in scopeBarContainer.subviews ) {
if ( [view isKindOfClass:[UISegmentedControl class]] ) {
scopeBarContainer.hidden = YES;
break;
}
}
答案 1 :(得分:0)
斯威夫特:
let scopeBarContainer: UIView? = searchController.searchBar.subviews.first?.subviews.first
if let _ = scopeBarContainer?.subviews.first(where: { $0.isKind(of: UISegmentedControl.self) } ) {
scopeBarContainer?.isHidden = true
}