过去几天试图弄清楚如何解决这个问题,我仍然找不到任何解决方案。
我想要做的就是以编程方式显示/隐藏UISearchBar,但我没有获得期望的结果。
我要做的是在向下滚动时隐藏搜索栏并在向上滚动时显示:
我像这样设置我的UISearchBar:
var mySearchcontroller = UISearchController(searchResultsController: nil)
mySearchcontroller.obscuresBackgroundDuringPresentation = false
mySearchcontroller.searchBar.placeholder = "search"
mySearchcontroller.searchBar.delegate = self
definesPresentationContext = true
self.navigationItem.searchController = mySearchcontroller
self.navigationItem.hidesBackButton = true
self.navigationItem.hidesSearchBarWhenScrolling = false
结果是
我实现scrollViewDidScroll以在滚动时显示或隐藏搜索栏:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if(scrollView.panGestureRecognizer.translation(in: scrollView.superview).y > 0)
{
navigationItem.hidesSearchBarWhenScrolling = false
}
else
{
navigationItem.hidesSearchBarWhenScrolling = true
}
}
结果是
当你意识到搜索栏掩盖了GRP标签或分段控件时,我在搜索栏按下所有控件时效果不一样(图1)
我该如何解决这个问题
答案 0 :(得分:1)
您可以按照以下步骤实现此功能:
为您的观点提供适当的自动布局。
为标题视图/搜索结果的高度设置IBOutlet,如:
@IBOutlet weak var constrainHeightHeader: NSLayoutConstraint!
编写scrollview委托方法,如:
//MARK: - Scrollview delegate
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
//
self.contentOffSet = self.cwProducts.contentOffset.y
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
//
let scrollPos = self.cwProducts.contentOffset.y
if scrollPos == self.contentOffSet{
return
}
if(scrollPos > self.contentOffSet ){
//Fully hide your toolbar
self.constrainHeightHeader.constant = 0
UIView.animate(withDuration: 0.2, animations: {
self.view.layoutIfNeeded()
}, completion: { (status) in
self.headerVW.isHidden = true
})
} else {
if(self.isFromBanner) {
self.constrainHeightHeader.constant = 0
}else{
self.constrainHeightHeader.constant = 50
}
UIView.animate(withDuration: 0.2, animations: {
self.view.layoutIfNeeded()
}, completion: { (status) in
self.headerVW.isHidden = false
})
}
}
我希望您明白我的意思,通过上述代码的细微更改,您将获得解决方案。
我的项目工作100%经过测试。