Swift autohide/show tableview 顶部的搜索栏
Swift autohide/show searchbar on top of tableview
我已经成功实现了一个搜索栏,现在我想在向下滑动 tableview 时显示搜索栏,再次向下滑动时隐藏搜索栏。我应该使用什么方法?谢谢
A UITableView
是 UIScrollView
的子类,它具有委托方法(来自 UIScrollViewDelegate),您可以使用它们来确定滚动何时开始和结束。
您可以使用 scrollViewDidScroll(_:)
方法在用户开始滚动时收到通知,并在滚动结束时使用 scrollViewDidEndDecelerating(_:)
方法收到通知。
从你的问题来看,我假设你已经有了 show/hide 搜索栏的方法;您只是在寻找 "when" 来调用您的 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
}
}
现在您应该确保在 showSearchBar
和 hideSearchBar
末尾更新 searchBarIsHidden
的值
在 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
}
我已经成功实现了一个搜索栏,现在我想在向下滑动 tableview 时显示搜索栏,再次向下滑动时隐藏搜索栏。我应该使用什么方法?谢谢
A UITableView
是 UIScrollView
的子类,它具有委托方法(来自 UIScrollViewDelegate),您可以使用它们来确定滚动何时开始和结束。
您可以使用 scrollViewDidScroll(_:)
方法在用户开始滚动时收到通知,并在滚动结束时使用 scrollViewDidEndDecelerating(_:)
方法收到通知。
从你的问题来看,我假设你已经有了 show/hide 搜索栏的方法;您只是在寻找 "when" 来调用您的 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
}
}
现在您应该确保在 showSearchBar
和 hideSearchBar
searchBarIsHidden
的值
在 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
}