UISearchController的UITableView顶部有额外的空间

时间:2016-11-05 07:24:01

标签: ios uisearchbar uisearchcontroller

我设置了UISearchController这样:

    searchResultsController = SearchResultsController()

    searchController = UISearchController(searchResultsController: searchResultsController)
    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = true
    searchController.searchBar.searchBarStyle = .minimal
    searchController.delegate = self
    definesPresentationContext = true

    navigationItem.titleView = searchController.searchBar

SearchResultsController只是一个视图控制器,UITableView可显示搜索结果。

当设备处于纵向状态时,开始在纵向模式下搜索,表格视图顶部有一个额外的空间(RESULT标题是表格视图的开头)

Device in portrait - Start search in portrait

然后,如果我旋转到横向模式,空间就会消失:

Device in landscape - Start search in portrait

当设备处于横向模式并开始搜索时,表视图将被切断:

Device in landscape - Start search in landscape

然后,如果我旋转到肖像,表视图完全适合:

Device in portrait - Start search in landscape

额外的空间高度与状态栏高度完全相同。所以我想知道这里有与状态栏相关的东西。

如果我将搜索栏指定为表格视图tableHeaderView,则不会发生这种情况。只有当搜索栏在导航标题中时才会发生。谁知道为什么?

3 个答案:

答案 0 :(得分:8)

显然automaticallyAdjustsScrollViewInsets已被弃用。

  在iOS 11.0中不推荐使用

'automatedAdjustsScrollViewInsets':改为使用UIScrollView的contentInsetAdjustmentBehavior

所以我建议你这样做:

searchResultsController.tableView.contentInsetAdjustmentBehavior = .never

它对我来说就像一个魅力。一些有用的文档:

contentInsetAdjustmentBehavior

UIScrollViewContentInsetAdjustmentBehavior

答案 1 :(得分:0)

viewDidLoad

中写下来
self.automaticallyAdjustsScrollViewInsets = false

答案 2 :(得分:0)

此问题仅适用于iOS 10.在viewDidLoad

中写下此内容
if #available(iOS 10.0, *) {
automaticallyAdjustsScrollViewInsets = false
tableView.contentInset = UIEdgeInsetsMake(64, 0, 44, 0)}