在tableview

时间:2015-12-02 16:26:13

标签: swift tableview searchbar

我已经成功实现了一个搜索栏,现在我想要向下滑动桌面视图以显示搜索栏,再次向下滑动以隐藏搜索栏。我应该使用哪些方法?谢谢

2 个答案:

答案 0 :(得分:4)

UITableViewUIScrollView的子类,它具有委托方法(来自UIScrollViewDelegate),您可以使用它来查找滚动何时开始和结束。

您可以使用scrollViewDidScroll(_:)方法在用户开始滚动时收到通知,并在滚动结束时通知scrollViewDidEndDecelerating(_:)

根据您的问题,我假设您已经有了显示/隐藏搜索栏的方法;你只是在寻找"当"致电您的showSearchBarhideSearchBar方法。

您可以拥有一个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
   }
}

现在,您应确保在searchBarIsHiddenshowSearchBar

结尾处更新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
}