【问题标题】:Search bar adds extra padding on clicking it搜索栏在单击时添加了额外的填充
【发布时间】:2015-08-31 07:37:30
【问题描述】:

当我点击我的搜索栏时,我会在搜索栏下方获得额外的填充。我确实设置了自定义高度,但即使我尝试恢复默认高度,它也会给我同样的问题。我现在添加了下面的代码。我在情节提要中没有任何搜索栏。我使用下面的代码创建它

import UIKit

class TableViewController: UITableViewController, UISearchResultsUpdating {
    var modelData: NSMutableArray = []
    var filteredData: NSMutableArray = []
    var resultSearchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()


        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()
    // Reload the table b
    tableView.reloadData()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // 1
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // 2
    if (self.resultSearchController.active) {
        return self.filteredData.count
    }
    else {
        return self.modelData.count
    }
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("detailLabels") as! TableViewCell

    // 3
    if (self.resultSearchController.active) {
        let data = self.filteredData[indexPath.row] as? [String: String]
        cell.newNameLabel?.text = data?["Name"]
        cell.newSizeLabel?.text = data?["Size"]
        cell.newPriceLabel?.text = data?["Price"]
        return cell
    }
    else {
        let data = self.modelData[indexPath.row] as? [String: String]
        cell.nameLabel?.text = data?["Name"]
        cell.sizeLabel?.text = data?["Size"]
        cell.priceLabel?.text = data?["Price"]
        return cell
    }
}

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredData.removeAllObjects()

    let searchPredicate = NSPredicate(format: "Name CONTAINS %@", searchController.searchBar.text)
    let array = (modelData as NSArray).filteredArrayUsingPredicate(searchPredicate)
    println(array)
    filteredData.addObjectsFromArray(array)

    tableView.reloadData()
}

【问题讨论】:

  • 有代码供我们审核吗?
  • 添加在上面!我在情节提要中没有任何搜索栏。我用代码创建它!感谢您的帮助,我花了 2 天时间查看所有在线帖子和教程。
  • 您是否尝试过视图调试器来确定哪个视图的大小不正确?它可以是各种各样的东西,例如您的表格视图显示不正确,您可能使用白色背景实现了 heightForHeaderInSection 方法等。从您的代码 sn-p 很难分辨。尝试转到 Debug > View Debugging > Capture View Hierarchy,看看你是否可以使用它来确定问题。
  • 我确实检查并在捕获视图层次结构中添加了 UIView,这似乎增加了额外的空间。所以我尝试只删除表格视图并重新编程。然后我尝试删除整个 Table View Controller 仍然没有运气。

标签: ios xcode swift uitableview uisearchbar


【解决方案1】:

假设 tableview 在搜索栏下扩展,您的 tableview 控制器很可能会自动调整滚动视图插图。看起来您没有在搜索栏下方扩展您的表格视图,因此表格视图控制器不应自动调整插图。

尝试在viewDidLoad 中添加以下行。

self.automaticallyAdjustsScrollViewInsets = false

这可以防止表格视图控制器调整滚动视图插图,应该可以解决您的错误。

【讨论】:

    【解决方案2】:

    将以下代码添加到数据源的 getcell Override 方法中以解决此问题:

    tableView.ContentInset = new UIEdgeInsets(45, 0, 0, 0);
    

    【讨论】:

    • 只是补丁:-p