搜索栏作为tableview中的标题 - 显示和消失

时间:2017-09-27 02:01:44

标签: ios swift ios11 swift4

我需要在我的tableview顶部放置一个搜索栏。我正在进行网络通话,当结果大于100时,我想搜索条显示,当它们小于100时,我不想搜索条显示。 tableview位于VC的右侧,不占用整个视图控制器。我希望搜索栏位于表格视图的顶部作为标题。

我无法使用搜索控制器,因为在iOS 11中,使用搜索控制器会使搜索栏在活动时弹出到VC的顶部。

我尝试将tableviewheader设置为nil以使其消失。但我显然无法得到它,因为我的标题为零。

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

我已将搜索栏放入故事板,如下图所示。这是将搜索栏添加为标题的正确方法吗?

enter image description here

让它在tableview中出现和消失的最佳方法是什么?我尝试过一堆不同的方法。他们都要留空头或做其他导致问题的事情。我也尝试使用标头委托方法,但仍然无法正常工作。

我没有使用tableview控制器,我使用的是普通的VC。我也没有使用搜索栏控制器,因为它在iOS 11中引起了问题。

2 个答案:

答案 0 :(得分:1)

这是我在最近的一个项目中所做的。首先,像我这样阐述我的观点:

view layouts in Xib

也就是说,搜索栏已添加到父视图而不是表视图中。这允许我根据需要隐藏/显示它。

接下来,我定义了两个可选的布局约束,一个确保tableview与安全区域的顶部对齐,优先级为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()
    }
}

在我的情况下,导航栏是不透明的,搜索栏后面不可见。您的情况可能会有所不同,因此您可能还想要剪切父视图,或者在搜索栏不可见时淡化搜索栏。

祝你好运!

答案 1 :(得分:0)

请检查:

为我的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故事板enter image description here