簡體   English   中英

如何隱藏tableView searchBar

[英]How do I hide a tableView searchBar

我想在tableView中有一個默認隱藏的searchBar,但是如果用戶拉下它就會出現。

因此,我使用以下代碼實現了此功能,但是當第一次顯示視圖時,searchBar會立即可見,因此我希望避免短暫閃爍。 self.tableView.contentOffset = CGPointMake(0, 0)viewDidLoad()方法沒有任何影響。 請注意,tableView在導航控制器后面,這就是為什么將Y偏移量設置為0會有效地將searchBar隱藏在導航欄后面的原因。 首次顯示該視圖時,如何確保tableView的headerView隱藏的任何想法。

我考慮過簡單地刪除headerView,但是用戶不能向下拖動以訪問它。

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.delegate = self
    searchBar.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 44)
    if let tv = self.tableView {
        if let headerView = tv.tableHeaderView {
            headerView.addSubview(searchBar)
        } else {
            FLOG("No table header view is available so create one!")
            let headerView = UIView()
            let width: CGFloat = tv.frame.size.width
            headerView.frame = CGRectMake(0, 0, width, 44);
            tv.tableHeaderView = headerView
            tv.tableHeaderView!.addSubview(searchBar)
        }
    }        
}
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    dispatch_after(0, dispatch_get_main_queue()) {
        self.tableView.contentOffset = CGPointMake(0, 0)
    }
}

我認為viewWillAppearviewDidLoad存在訂購問題。 據我了解,每當繪制一個視圖並將其添加到視圖層次結構時,都會調用viewWillAppear ,而當VC首次加載其子視圖時,會調用viewDidLoad。

因此,我假設您是在第一次運行時通過帶viewDidLoadmainQueue運行視圖加載,將搜索欄放置在(0,44),然后調用viewWillAppear ,但實際上由於調用在表上移動表的偏移量而導致短暫的視覺模糊mainQueue。 但是在隨后的調用中,由於viewDidLoad已經發生,因此僅viewWillAppear被調用。 而且,由於搜索欄並非先從(0,44)開始,然后需要移至(0,0),因此不會出現提示。

將其添加到tableHeader后,嘗試直接調用sizeToFit而不是直接為搜索欄定義框架。 其次,我認為您不必實例化標題視圖,只需將其設置為等於搜索欄即可。 最后,將contentOffset調用從dispatch_queue中取出,應該由viewWillAppear正確處理。

我最近深入研究了適用於iOS8的UISearchController,並記錄了整個旅程(至少部分而言)。 對於我使用的代碼, 這是指向實現文件和我所做的相應文章 的鏈接 它在ObjC中,因此您需要做一些翻譯。 但它看起來像:

 self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.filteredResultsTableViewController];
 self.searchBar = self.searchController.searchBar; 

 // other code ...

 [self.searchBar sizeToFit];

 // other code ...

 self.tableView.tableHeaderView = self.searchBar;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM