9

使用具有自适应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];
}

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

景观开始看起来不错

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

在此处输入图像描述

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

在此处输入图像描述

(我也尝试将搜索控制器searchBar放在titleView. 虽然 searchBar 正确适应,但搜索结果控制器仍然看起来不正确。)

UISearchController当 UI 适应不断变化的尺寸类时,我缺少什么来正确地为自己设置动画?

更新:

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

4

1 回答 1

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 中并锁定屏幕方向!自从您发布答案后,行为可能已经改变。

于 2015-08-29T08:24:50.487 回答