旋转期间UISplitViewController和UISearchController的iPhone 6 Plus Autolayout问题

时间:2016-03-18 16:51:55

标签: ios autolayout uisplitviewcontroller uisearchcontroller iphone-6-plus

UISearchController界面的主人身上显示UISplitViewController时,iOS 8/9上的自动布局无法正常工作。

要重现此问题:

  1. 在Xcode中创建一个新的Master-Detail应用程序(使用swift,无核心数据)
  2. var searchController: UISearchController!添加到MasterViewController
  3. viewDidLoad()

    下添加以下内容
    searchController = UISearchController(searchResultsController: nil)
    definesPresentationContext = true
    tableView.tableHeaderView = searchController.searchBar
    
  4. 在iPhone 6 Plus或模拟器上运行应用程序

  5. 旋转至风景。
  6. 点按“+”按钮,然后选择项目以便详细更新
  7. 点按搜索栏,将其显示在导航栏中
  8. 旋转回肖像,细节现在应占据全屏。
  9. 导航回主人(点击“< Master”)
  10. 取消搜索(点按“取消”)
  11. 旋转回横向
  12. 现在您可以看到UISearchBar不对齐。

    Master Detail Application

    我们可以在视图调试器中验证这一点:

    View Debugger

    如果您点击“显示剪辑内容”按钮,则此问题更加明显:

    enter image description here

    不只是UISearchBar未对齐,而是整个MasterViewController。

    我也在原生邮件和消息应用中重现了这个问题:

    iOS Mail App

    iOS Messages App

      

    有没有人找到解决这个特定问题的方法?

1 个答案:

答案 0 :(得分:1)

到目前为止,我找到的唯一可接受的解决方案是实现UISplitViewControllerDelegate方法:

func splitViewController(splitViewController: UISplitViewController,
    collapseSecondaryViewController secondaryViewController: UIViewController,
    ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
        return true
}

不要忘记设置拆分视图控制器的委托。

虽然这可能不是理想的折叠行为,但它似乎阻止了自动布局问题。