如何根据我的 tableview 的 contentOffset 显示/隐藏自定义视图?
How to show / hide custom view depending the contentOffset of my tableview?
我有一个聊天应用程序,我试图在用户滚动到顶部时显示我创建的自定义视图,如果它位于表格视图的底部,也会将其隐藏。 (就像 whatsapp 一样)
老实说,我正在为 show/hide 按钮的逻辑而苦苦挣扎。
试图在我重新加载数据后立即保存我的 tableview 的 contentOffset.y,这样我就知道那是底部,如果它更小以显示自定义视图,但 mainTableView.contentOffset.y 它总是 0.
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if (scrollView == mainTableView) {
print(mainTableView.contentOffset.y)
if let point = startingPointForView {
//where var startingPointForView: CGFloat?
// and tried to save it after I reload the data
//self.startingPointForView = self.mainTableView.contentOffset.y
// but it's always 0
}
// Show and hide button logic
}
}
我想要实现的目标的图像:https://imgur.com/ZkYEi2P
也许这段代码会对你有所帮助
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y > 0 {
// down
button.isHidden = false
} else {
// up
button.isHidden = true
}
}
尝试使用此代码 hide/show 根据 UIscrollview
contentOffset
自定义视图
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let scrollViewContentHeight = scrollView.contentSize.height
let scrollViewHeight = scrollView.frame.height
if scrollView.contentOffset.y < (scrollViewContentHeight - scrollViewHeight){
//Custom view show
}else{
//Custom view Hide
}
}
对于希望在 tableview 滚动时隐藏按钮的人可以使用以下代码:
var previousContentOffset: CGFloat = CGFloat()
扩展 YourViewController: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.yourTableView{
let currentContentOffset = scrollView.contentOffset.y
if (currentContentOffset > previousContentOffset) {
// scrolling towards the bottom
if scrollView.contentOffset.y > 50 {
self.yourButton.isHidden = true
} else {
self.yourButton.isHidden = false
}
} else if (currentContentOffset < previousContentOffset) {
// scrolling towards the top
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
// Change 10.0 to adjust the distance from bottom
if maximumOffset - currentContentOffset <= 10.0 {
self.yourButton.isHidden = true
} else {
self.yourButton.isHidden = false
}
}
previousContentOffset = currentContentOffset
}
}
}
我有一个聊天应用程序,我试图在用户滚动到顶部时显示我创建的自定义视图,如果它位于表格视图的底部,也会将其隐藏。 (就像 whatsapp 一样)
老实说,我正在为 show/hide 按钮的逻辑而苦苦挣扎。 试图在我重新加载数据后立即保存我的 tableview 的 contentOffset.y,这样我就知道那是底部,如果它更小以显示自定义视图,但 mainTableView.contentOffset.y 它总是 0.
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if (scrollView == mainTableView) {
print(mainTableView.contentOffset.y)
if let point = startingPointForView {
//where var startingPointForView: CGFloat?
// and tried to save it after I reload the data
//self.startingPointForView = self.mainTableView.contentOffset.y
// but it's always 0
}
// Show and hide button logic
}
}
我想要实现的目标的图像:https://imgur.com/ZkYEi2P
也许这段代码会对你有所帮助
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y > 0 {
// down
button.isHidden = false
} else {
// up
button.isHidden = true
}
}
尝试使用此代码 hide/show 根据 UIscrollview
contentOffset
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let scrollViewContentHeight = scrollView.contentSize.height
let scrollViewHeight = scrollView.frame.height
if scrollView.contentOffset.y < (scrollViewContentHeight - scrollViewHeight){
//Custom view show
}else{
//Custom view Hide
}
}
对于希望在 tableview 滚动时隐藏按钮的人可以使用以下代码:
var previousContentOffset: CGFloat = CGFloat()
扩展 YourViewController: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.yourTableView{
let currentContentOffset = scrollView.contentOffset.y
if (currentContentOffset > previousContentOffset) {
// scrolling towards the bottom
if scrollView.contentOffset.y > 50 {
self.yourButton.isHidden = true
} else {
self.yourButton.isHidden = false
}
} else if (currentContentOffset < previousContentOffset) {
// scrolling towards the top
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
// Change 10.0 to adjust the distance from bottom
if maximumOffset - currentContentOffset <= 10.0 {
self.yourButton.isHidden = true
} else {
self.yourButton.isHidden = false
}
}
previousContentOffset = currentContentOffset
}
}
}