如何在swift

时间:2018-03-13 07:10:56

标签: ios swift uisearchbar uisearchcontroller

过去几天试图弄清楚如何解决这个问题,我仍然找不到任何解决方案。

我想要做的就是以编程方式显示/隐藏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

结果是

enter image description here

我实现scrollViewDidScroll以在滚动时显示或隐藏搜索栏:

  func scrollViewDidScroll(_ scrollView: UIScrollView) {
if(scrollView.panGestureRecognizer.translation(in: scrollView.superview).y > 0)
{

    navigationItem.hidesSearchBarWhenScrolling = false
    }
else
{
 navigationItem.hidesSearchBarWhenScrolling = true
}

}

结果是

enter image description here

当你意识到搜索栏掩盖了GRP标签或分段控件时,我在搜索栏按下所有控件时效果不一样(图1)

我该如何解决这个问题

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%经过测试。