簡體   English   中英

搜索欄作為tableview中的標題-顯示和消失

[英]Search bar as header in tableview - appear and disappear

我需要在表格視圖的頂部放置一個搜索欄。 我正在打網絡電話,當結果大於100時,我想顯示搜索欄,而當結果小於100時,我不希望顯示搜索欄。 tableview位於VC的右側,不占用整個視圖控制器。 我希望搜索欄作為標題位於表格視圖的頂部。

我無法使用搜索控制器,因為在iOS 11中,使用搜索控制器會使搜索欄處於活動狀態時彈出到VC的頂部。

我試圖將tableviewheader設置為nil使其消失。 但是我顯然無法將其取回,因為我將標頭設為零。

self.rightDetailFilterTableView.tableHeaderView = nil
self.rightDetailFilterTableView.sectionHeaderHeight = 0

我將搜索欄放入情節提要中,如下圖所示。 這是將搜索欄添加為標題的正確方法嗎?

在此處輸入圖片說明

使它在表格視圖中顯示和消失的最佳方法是什么? 我嘗試了很多不同的方法。 它們要么留空標題,要么做其他可能導致問題的事情。 我也嘗試使用標頭委托方法,但仍然無法正常工作。

我沒有使用tableview控制器,而是在使用普通的VC。 由於它在iOS 11中引起的問題,我也沒有使用搜索欄控制器。

這是我在最近的一個項目中所做的。 首先,這樣布置我的觀點:

在Xib中查看布局

也就是說,搜索欄已添加到父視圖而不是表視圖。 這使我可以根據需要隱藏/顯示它。

接下來,我定義了兩個可選的布局約束,一個約束確保表格視圖與安全區域頂部(優先級750)對齊; 另一個將搜索欄的頂部與安全區域的頂部對齊; 低於750的優先級可將其隱藏在導航欄下方,或高於750的優先級可將其顯示在導航欄下方。

在代碼中,我為安全區域頂部的搜索欄的布局約束創建了一個@IBOutlet,並根據需要更改其優先級:

@IBAction
func toggleSearchBar(_ sender: Any?) {
    if searchBarVisibleLayoutConstraint.priority.rawValue > 750.0 {
        searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 1.0)
        searchBar?.endEditing(true)
    } else {
        searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 999.0)
    }
    UIView.animate(withDuration: 0.3) {
        self.view.layoutIfNeeded()
    }
}

就我而言,導航欄是不透明的,而搜索欄在其后面是不可見的。 您的情況可能有所不同,因此您可能還希望修剪父視圖或在不可見時使Alpha淡入搜索欄。

祝好運!

請檢查 :

為我的SearchBar創建了IBOutlet。

@IBOutlet weak var testbar: UISearchBar!

在我的viewDidLoad

override func viewDidLoad() {
    var contentOffset = tableView.contentOffset
    let showSearchBar = (results.count > 100)
    self.tableView.tableHeaderView?.isHidden = !(showSearchBar)
    if showSearchBar {
        contentOffset.y -= testbar.frame.size.height
    } else {
        contentOffset.y += testbar.frame.size.height
    }
    tableView.contentOffset = contentOffset
}

這是我的tableview故事板 在此處輸入圖片說明

暫無
暫無

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

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