iOS9 范围栏出现在搜索栏后面或旁边

iOS9 Scope Bar appears either behind or beside Search Bar

我有一个自定义 UITableViewControllerUISearchController 设置为 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 首次加载时,范围栏在搜索栏​​下方可见并占据整个宽度:

点击搜索栏内部后,范围栏显示在搜索栏旁边:

点击取消后,搜索栏正确显示,下面没有范围栏,尽管搜索栏上的后续触摸仍然显示其旁边的范围栏:

我试过以下方法:

到目前为止,外表或行为没有任何不同。我想要搜索栏下方的范围栏,并且它最初不会出现在搜索栏后面。 UISearchController 是被破坏了还是我只是在做一些愚蠢的事情。

这是 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;
    }
}

Swift :

let scopeBarContainer: UIView? = searchController.searchBar.subviews.first?.subviews.first
if let _ = scopeBarContainer?.subviews.first(where: { [=10=].isKind(of: UISegmentedControl.self) } ) {
     scopeBarContainer?.isHidden = true
}