ios - 搜索栏在单击时添加额外的填充

标签 ios xcode swift uitableview uisearchbar

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

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()
}

最佳答案

假设表格 View 在搜索栏下方扩展,您的表格 View Controller 很可能会自动调整 ScrollView 插图。看起来您没有在搜索栏下方扩展您的表格 View ,因此表格 View Controller 不应自动调整插图。

尝试在 viewDidLoad 中添加以下行。

self.automaticallyAdjustsScrollViewInsets = false

这会阻止 tableview Controller 调整 scrollview insets,应该可以解决你的错误。

关于ios - 搜索栏在单击时添加额外的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30851420/

相关文章:

design-patterns - UIVIew 或 UIViewController 中的复杂 View 设置? (设计决策)

swift - 多个 UITableViewCells 每个都有 UIProgressView 更新非常慢

ios - 从 Info.plist 中删除启动屏幕文件会缩放 View

c++ - "Proper way"将文件夹添加到 XCode 4 中的包含路径

ios - UITableView 中的单元格标题

ios - 在 UITableViewCell 上使用 IB 的 "User Defined Runtime Attributes"

ios - 改变笔划动画的方向

ios - 纹理画笔(绘图应用程序)使用 Metal

ios - 数组计数错误 swift

ios - box2d 调试绘图不工作