我已经成功实现了一个搜索栏,现在我想要向下滑动桌面视图以显示搜索栏,再次向下滑动以隐藏搜索栏。我应该使用哪些方法?谢谢
答案 0 :(得分:4)
UITableView
是UIScrollView
的子类,它具有委托方法(来自UIScrollViewDelegate),您可以使用它来查找滚动何时开始和结束。
您可以使用scrollViewDidScroll(_:)
方法在用户开始滚动时收到通知,并在滚动结束时通知scrollViewDidEndDecelerating(_:)
。
根据您的问题,我假设您已经有了显示/隐藏搜索栏的方法;你只是在寻找"当"致电您的showSearchBar
或hideSearchBar
方法。
您可以拥有一个Bool
属性来存储searchBar
是否隐藏,并相应地调用您的方法。
let searchBarIsHidden = true
override func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
if searchBarIsHidden {
showSearchBar() //your show search bar function
} else {
hideSearchBar() //your hide search bar function
}
}
现在,您应确保在searchBarIsHidden
和showSearchBar
hideSearchBar
的值
答案 1 :(得分:1)
在Swift中使用搜索栏的顶级约束进行漂亮的隐藏和显示:
var lastContentOffset:CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let bottomOffset = scrollView.contentSize.height - scrollView.bounds.height
guard scrollView.contentOffset.y < bottomOffset else {
return
}
guard scrollView.contentOffset.y > 0 else {
searchBarTopConstraint.constant = 0
return
}
let offsetDiff = scrollView.contentOffset.y - lastContentOffset
let unsafeNewConstant = searchBarTopConstraint.constant + (offsetDiff > 0 ? -abs(offsetDiff) : abs(offsetDiff))
let minConstant:CGFloat = -searchBar.frame.height
let maxConstant:CGFloat = 0
searchBarTopConstraint.constant = max(minConstant, min(maxConstant, unsafeNewConstant))
lastContentOffset = scrollView.contentOffset.y
}