我应该如何使用UISplitView自适应用户界面呈现UISearchController?

时间:2015-01-16 18:01:45

标签: ios ios8 uisplitviewcontroller uisearchcontroller adaptive-ui

使用具有自适应UISplitViewController用户界面的通用故事板。

我想使用以下代码(来自主视图控制器)在主(主)端提供搜索控制器:

static NSString * const kCGISearchViewControllerID = @"SearchViewControllerID";

- (IBAction)searchButtonClicked:(UIBarButtonItem *)__unused sender {
    SearchViewController *searchResultsController = [self.storyboard instantiateViewControllerWithIdentifier:kCGISearchViewControllerID];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
    self.searchController.searchResultsUpdater = searchResultsController;
    self.searchController.hidesNavigationBarDuringPresentation = NO;
    [self presentViewController:self.searchController animated:YES completion:nil];
}

它最初似乎正常工作(无论起始方向):

Landscape starts out looking ok

自动旋转后出现问题(键盘仍然可见,底层内容仍然暗淡,但搜索栏已消失):

enter image description here

旋转回横向时,搜索栏会重新出现,但其宽度现在是错误的:

enter image description here

(我也尝试将搜索控制器的searchBar放在titleView中。当searchBar正确调整时,搜索结果控制器仍然看起来不正确。)

当UI适应不断变化的大小类时,我想让一个呈现的UISearchController正确地为自己设置动画,我缺少什么?

更新

添加self.definesPresentationContext = YES;会使搜索栏/结果显示在主视图中,但搜索栏会在导航栏下为设置动画,并且不可见。另一个问题是,当它从纵向(具有状态栏)旋转回到横向时,搜索栏高度不会缩小。

1 个答案:

答案 0 :(得分:5)

您使用的是什么Xcode版本?模拟器上的iOS版本是什么? 尝试使用Xcode 6,iOS 8.4 - 这就是我在MasterVC中使用的所有代码:

class MasterViewController: UITableViewController {

    @IBAction func search(sender: UIBarButtonItem) {
        let searchController = UISearchController(searchResultsController: nil)
        searchController.hidesNavigationBarDuringPresentation = false
        presentViewController(searchController, animated: true, completion: nil)
    }
...
}

它在Master中呈现并锁定了屏幕的方向!自您发布答案后,行为可能已发生变化。