当UISplitViewController模式全部可见时,UISearchController搜索栏放错了位置

时间:2016-12-22 03:23:52

标签: ios uisearchbar uisplitviewcontroller uisearchcontroller

我的根视图控制器是UISplitViewControllerpreferredDisplayModeUISplitViewControllerDisplayModeAllVisible。在详细视图控制器中,我有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中包含的内容。

这是它最初的样子(我裁剪了图像的高度):

enter image description here

但是当搜索控制器处于活动状态时,搜索栏的origin.x错位到右侧,完全等于主视图控制器的宽度:

enter image description here

当分割视图控制器处于UISplitViewControllerDisplayModePrimaryHidden模式时,不会发生这种情况,搜索栏显示完全正常:

enter image description here

那是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;
        });
    }
}

1 个答案:

答案 0 :(得分:1)

这给了我很多麻烦。由于搜索栏在SplitView中放错了位置,我的应用程序可以处理iPad以外的所有内容。我终于找到了发布解决方案的人。将其添加到表视图的viewDidLoad()末尾:

self.definesPresentationContext = true

来源:searchBar from UISearchController not showing correctly on split view on iPad