我的根视图控制器是UISplitViewController
,preferredDisplayMode
是UISplitViewControllerDisplayModeAllVisible
。在详细视图控制器中,我有UISearchController
,但我没有UITableView
来附加搜索栏,因此我在视图中放置了UIView
并添加了搜索栏进入它:
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
_searchController.hidesNavigationBarDuringPresentation = NO;
// This is the view to contain search bar
_searchView.backgroundColor = [UIColor greenColor];
[_searchView addSubview:_searchController.searchBar];
self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
更新:UISearchBar
设置为tableView.tableHeaderView
时也会发生这种情况,而不仅仅是UIView
中包含的内容。
这是它最初的样子(我裁剪了图像的高度):
但是当搜索控制器处于活动状态时,搜索栏的origin.x
错位到右侧,完全等于主视图控制器的宽度:
当分割视图控制器处于UISplitViewControllerDisplayModePrimaryHidden
模式时,不会发生这种情况,搜索栏显示完全正常:
那是UISplitViewController
的错误吗?目前我用这种丑陋的方式解决了这个问题,重置搜索栏的origin.x
,这有点不好意思:
- (void)didPresentSearchController:(UISearchController *)searchController {
searchController.searchBar.superview.clipsToBounds = NO;
if (self.splitViewController.displayMode == UISplitViewControllerDisplayModeAllVisible) {
searchController.searchBar.frame = ({
CGRect frame = searchController.searchBar.frame;
frame.origin.x -= self.splitViewController.primaryColumnWidth;
frame;
});
}
}
答案 0 :(得分:1)
这给了我很多麻烦。由于搜索栏在SplitView中放错了位置,我的应用程序可以处理iPad以外的所有内容。我终于找到了发布解决方案的人。将其添加到表视图的viewDidLoad()末尾:
self.definesPresentationContext = true
来源:searchBar from UISearchController not showing correctly on split view on iPad