searchBar与节标题视图重叠

时间:2016-02-09 05:32:22

标签: ios iphone uitableview autolayout uisearchbar

我将searchBar放在tableHeaderView中。 在iphone 6上一切正常,但在iphone 5s上我得到了这个奇怪的结果?

 override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    tableView.sectionIndexColor = Constants.Colors.ThemeGreen
    tableView.sectionIndexBackgroundColor = UIColor.clearColor()
    tableView.sectionIndexTrackingBackgroundColor = UIColor.clearColor()
    tableView.contentInset = UIEdgeInsetsMake(0, 0, CGFloat(Constants.Dimensions.TabBarHeight), 0)
    resultSearchController = UISearchController(searchResultsController: nil)
    resultSearchController.searchResultsUpdater = self
    resultSearchController.dimsBackgroundDuringPresentation = false
    resultSearchController.definesPresentationContext = true
    tableView.tableHeaderView = resultSearchController.searchBar
    resultSearchController.searchBar.sizeToFit()

 //Fetch data for the first time
    do{
      try fetchedResultsController.performFetch()
      listHeaderView?.count = "\(fetchedResultsController.fetchedObjects!.count)"
    }catch{
      print("Error - Couldn't fetch list")
    }
  • 注意:我正在使用NSFetchedResultController来检索数据

enter image description here

3 个答案:

答案 0 :(得分:3)

这是解决方案。 在将searchBar放入tableHeaderView之后不要调用sizeToFit(),而是在BEFORE之前调用它。 现场到底发生了什么......我不知道......

resultSearchController.searchBar.sizeToFit() //Important to call sizeToFit BEFORE adding it to tableHeaderView or you get layout issues
tableView.tableHeaderView = resultSearchController.searchBar

答案 1 :(得分:0)

似乎只有下面的代码行才能正常工作......现在似乎没有其他工作正常工作。

self.tableView.beginUpdates()
       // self.tableView.setTableHeaderView(headerView: self.filterView!)
        //self.tableView.reloadData()
        self.tableView.layoutIfNeeded()
        self.tableView.layoutSubviews()
        self.tableView.endUpdates()

每次你的表调整大小或更改你需要调用上面代码的约束。

答案 2 :(得分:0)

试试这可能有效

resultSearchController.clipToBounds = true

您也可以尝试

searchControl.searchBar.clipToBounds = true

我认为它适用于您的代码。