2017-09-27 53 views
0

我需要在我的tableview的顶部放置一个搜索栏。我正在进行网络调用,当结果大于100时,我想要搜索栏出现,当它们小于100时,我不想搜索栏出现。 tableview位于VC的右侧,不占用整个视图控制器。我希望搜索栏作为标题位于表视图的顶部。搜索栏作为tableview中的标题 - 出现并消失

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

我试图设置tableviewheader为零以使其消失。但我无法明显地回头,因为我把头标为零。

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

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

enter image description here

什么是得到它的出现,并在tableview中消失的最好方法?我尝试了一堆不同的方法。他们都留下一个空白的标题或做其他导致问题的东西。我也尝试使用头委托方法,但仍然无法正常工作。

我没有使用tableview控制器,我正在使用正常的VC。我也没有使用搜索栏控制器,因为它在iOS 11引起的问题。

+0

[隐藏的UITableView搜索栏(可能的重复https://stackoverflow.com/questions/9798901/ hide-uitableview-search-bar) – ekscrypto

回答

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

我完全没有使用这种方法,但它是我的解决方案的灵感(LOL)。我用堆栈视图来处理混乱的约束。 –

0

请检查:

IBOutlet中创建为我SearchBar

@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

+0

这将隐藏搜索栏,但隐藏时仍有空白区域。我试过这种方法,它不起作用。通过设置内容偏移量,当用户向上滚动时仍然会有空白区域。 –

相关问题