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

Posted

技术标签:

【中文标题】我应该如何使用 UISplitView 自适应用户界面呈现 UISearchController?【英文标题】:How should I present a UISearchController using a UISplitView adaptive user interface? 【发布时间】:2015-01-16 18:01:45 【问题描述】:

使用具有自适应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 正确适应,但搜索结果控制器仍然看起来不正确。)

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

更新:

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

【问题讨论】:

添加self.definesPresentationContext = YES; 让我更进一步 【参考方案1】:

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

【讨论】:

可能。许多错误在 8.3 和 8.4 中得到修复。感谢您的报告。我发布了那个应用程序,但会在以后的应用程序中记住它。 iOS 9.2、swift2、xcode 7.2 的更新:在情节提要 Tableview 中测试,对 swift 代码的细微更改 @IBAction func startSearch() presentViewController(searchController, animated: true, completion: )

以上是关于我应该如何使用 UISplitView 自适应用户界面呈现 UISearchController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自适应对话框 HttpRequest 中从 xml 转换为 json?

使用 UIView 大小平衡自适应大小字体(UIFontMetrics)?

DIV+CSS,如何让图片自适应大小?

jquery 如何让图片自适应大小

设置窗口的自适应大小

js中怎么使用showModalDialog,弹出一个自适应大小窗口????