如果我点击导航栏中的搜索按钮,然后显示一个uisearchbar并且需要关闭,然后取消点击导航栏中的搜索按钮,然后隐藏uisearchbar并且表格需要移动到顶部。
请找到我要求的屏幕截图
答案 0 :(得分:1)
考虑到它是一个表,我会将该搜索面板实现为自定义UITableViewCell
,并仅使用此单元格向tableView添加一个新部分。然后你将在表格中有两个部分:第一个是这个单元格,第二个是其余部分。
然后,您可以使用insertRows(at:with:)
和deleteRows(at:with:)
来显示和隐藏该面板(支持动画)。你只需要有一些数据模型来确保tableView的状态始终是一致的(我将在你身上留下适当的cellForRowAt
实现):
var isCurrentlyShowingSearchBar: Bool = false
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return isCurrentlyShowingSearchBar ? 1 : 0
case 1:
return items.count
default:
fatalError()
}
}
func showSearchBar() {
// update model
isCurrentlyShowingSearchBar = true
// add cell
tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
}
func hideSearchBar() {
// update model
isCurrentlyShowingSearchBar = false
// remove cell
tableView.deleteRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
}
答案 1 :(得分:0)
这是隐藏和显示搜索栏的代码。
你需要参考像
这样的顶级约束@IBOutlet weak var SearchTop: NSLayoutConstraint!
@IBOutlet weak var bar: UISearchBar!
在viewdidload中设置常量,如
override func viewDidLoad()
{
super.viewDidLoad()
SearchTop.constant = bar.frame.size.height * -1
self.view.layoutIfNeeded()
}
然后实现搜索按钮的点击事件,如
@IBAction func onclickSearch(_ sender: Any) {
if SearchTop.constant == 0
{
SearchTop.constant = bar.frame.size.height * -1;
}
else
{
SearchTop.constant = 0;
}
UIView.animate(withDuration: 1) {
self.view.layoutIfNeeded()
}
}