导航栏和第一个UITableViewCell之间的差距

问题描述

我有一个UITableViewController,在导航栏中嵌入了一个搜索控制器。

当视图以模式显示时,第一行和导航栏之间会有一个间隙。

enter image description here

这是我的实现。为了保密起见,一些代码已被删除。但是有关视图控制器设置的任何内容仍然应该存在:

import Foundation

class SearchViewController: UITableViewController {

    fileprivate lazy var searchController: UISearchController = {
        let searchController = UISearchController(searchResultsController: nil)
        searchController.dimsBackgroundDuringPresentation = false
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.searchBar.showsCancelButton = true
        searchController.searchBar.delegate = self
        return searchController
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        setupTableView()

        navigationItem.titleView = searchController.searchBar
    }

    override func viewWilldisappear(_ animated: Bool) {
        super.viewWilldisappear(animated)
        navigationController?.navigationBar.tintColor = BrandColor.appleDarkGray
    }

}

extension ExploreSearchViewController: UISearchBarDelegate {

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        presentingViewController?.dismiss(animated: true,completion: nil)
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        if let searchText = searchBar.text {
            tableView.refreshControl?.beginRefreshing()
            searchedText = searchText
        }
    }
}

// MARK: - UITableView Methods
extension ExploreSearchViewController {
    override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        return searchResultsProvider.searchResults.count
    }

    override func tableView(_ tableView: UITableView,willdisplay cell: UITableViewCell,forRowAt indexPath: IndexPath) {
        guard searchResultsProvider.canLoadNextPage else { return }

        // handle paging here...
    }

    override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard searchResultsProvider.searchResults.count > indexPath.row else { return UITableViewCell() }

        // Setup search result cell here...
    }

    override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        // Handle cell did tap here...
    }

    @objc private func refresh() {
        searchResultsProvider.refreshResults()
    }

    // MARK - Table View Helpers

    private func setupTableView() {
        registerCells()
        self.tableView.backgroundColor = .white
        self.tableView.contentInsetAdjustmentBehavior = .always
        self.tableView.refreshControl = UIRefreshControl()
        self.tableView.refreshControl?.addTarget(self,action: #selector(refresh),for: .valueChanged)
        self.tableView.useDefaultPageLoadingIndicator()
        self.tableView.setBackgroundViewIfEmpty(message: Self.searchInitialMessage,remedyButton: nil)
    }

    private func registerCells() {
        //Register Table View Cells here...
    }
}

有人以前见过这种问题吗?我无法移动顶部边缘的插图,因为这样刷新控件将隐藏在导航栏的后面。

有人见过这种行为吗?如果是这样,您是如何解决的?

解决方法

该问题是由先前的视图控制器上的表视图样式设置为.grouped引起的。

将样式设置为.plain解决了此问题。

我相信分组样式导致空白的原因是因为其在单元格上方添加了空节头。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...