我的 Root View Controller 是 UISplitViewController
,preferredDisplayMode
是 UISplitViewControllerDisplayModeAllVisible
。在详细 View Controller 中,我有一个 UISearchController
,但是我没有 UITableView
来附加搜索栏,所以我放置了一个 UIView
在 View 中添加搜索栏:
_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
中时>.
这是它最初的样子(我裁剪了图像的高度):
但是当搜索 Controller 处于事件状态时,搜索栏框架的 origin.x
错位到右侧,正好等于主视图 Controller 的宽度:
当 Split View Controller 处于 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;
});
}
}
最佳答案
这给我带来了很多麻烦。由于搜索栏在 SplitView 中放错了位置,我的应用程序可以在除 iPad 以外的所有设备上运行。我终于遇到了发布解决方案的人。将此添加到 TableView 的 viewDidLoad() 末尾:
self.definesPresentationContext = true
来源:searchBar from UISearchController not showing correctly on split view on iPad
关于ios - 当 UISplitViewController 模式全部可见时,UISearchController 搜索栏错位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275318/