2017-10-13 91 views
0

我正在使用帶有UISearchBar的UITableViewController。 UITableViewController嵌入在UINavigationController中。顯示錶格視圖時,搜索欄位於預期的頂部(位於導航欄下方)。導航欄顯示標題和提示。IOS:UISearchBar部分覆蓋UINavigationB並提示

當我點擊搜索欄時,它會向上移動並將標題隱藏在我的導航欄中。提示仍然可見。 當我不使用提示時,點擊它後,搜索欄仍然在導航欄的下方。

我創建了一個非常簡單的項目來演示我的問題。該項目有一個UITableViewController以下文件:

import UIKit 

class searchTVC: UITableViewController, UISearchControllerDelegate, UISearchResultsUpdating { 
    fileprivate let searchController = UISearchController(searchResultsController: nil) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     title = "Title" 
     navigationItem.prompt = "prompt" 

     tableView.backgroundColor = UIColor.gray 

     // Add search bar 
     searchController.delegate = self 
     searchController.searchResultsUpdater = self 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.dimsBackgroundDuringPresentation = false 
     searchController.searchBar.sizeToFit() 

     tableView.tableHeaderView = searchController.searchBar 

     // remove separators for empty table 
     tableView.tableFooterView = UIView() 
    } 

    func updateSearchResults(for searchController: UISearchController) { 
     // ignore 
    } 
} 

在故事板只有嵌入在一個UINavigationController的一個空的UITableViewController。結果如下所示。

如果您註釋掉設置提示的行爲是按預期的一致。

我最近更新了我的代碼斯威夫特4.我不記得,我看到用斯威夫特3時,這種行爲,但我不能完全確定,它正在與雨燕推出4

我缺少的東西代碼或這是一個錯誤?

回答

1

集這些於viewDidLoad

self.definesPresentationContext = true 
self.edgesForExtendedLayout = .bottom