繁体   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