添加 UISearchBar 后 UITableView 底部清空 space

Empty space at the bottom of UITableView after adding UISearchBar

我正在制作一个显示过去事件记录的 UITableView。一切看起来都很棒,直到我在顶部添加了一个搜索栏。当它滚动到顶部时,一切看起来都是我想要的:

但是,当我滚动到底部时,现在有一堆白色 space。很难在这个屏幕截图中分辨出来,因为没有屏幕边框,但 tableview 滚动将停留在这个屏幕上,大约一半的页面空白:

有趣的是,当我完全激活搜索栏(即单击它然后按取消)时,白色 space 消失,直到再次出现此视图。

我尝试了 tableView 的各种设置以及在视图布局过程的各个阶段使用 reloadData() 都无济于事。我知道行数是正确的。我发现让白色 space 消失的唯一方法是禁用搜索栏。但是我想要搜索栏!

这是搜索栏的代码:

self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.searchBar.placeholder = "Search by keyword, name, etc."
        controller.searchBar.barTintColor = UIColor(red: 224/256, green: 244/256, blue: 255/256, alpha: 1)
        controller.searchBar.delegate = self

        self.pastServicesTable.tableHeaderView = controller.searchBar

        return controller
    })()

您似乎在观察 UIKeyboardWillShowNotification & UIKeyboardWillHideNotification 并更改 tableView 的 contentInset(将 keyBoard 大小高度添加到 contentInsets)而不是将 contentInsets 设置为 UIEdgeInsetsZero当键盘隐藏时。

同样的事情发生在我身上。在 viewDidLoad 中声明 tableview 行高(即 self.tableView.rowHeight = 350)修复了它。

我通过这种方式(在 viewDidLoad 中)解决了额外的底部 space:

tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 200 // should be more than real row height will be