在collectionView中完成移动后无法隐藏按钮
Posted
技术标签:
【中文标题】在collectionView中完成移动后无法隐藏按钮【英文标题】:unable to hide button after completing moving in collectionView 【发布时间】:2017-08-23 11:11:54 【问题描述】:我通过水平单击按钮在collectionView的左侧和右侧滚动,效果很好,但是当collectionView的一侧没有更多项目时,我不知道如何隐藏按钮。当左侧没有更多项目时,预览按钮将隐藏,当右侧没有更多项目时,下一个按钮将隐藏。这是左右键的代码
let arrow_leftBtn: UIButton =
let btn = UIButton()
btn.setImage(UIImage(named: "arrow_left"), for: .normal)
btn.addTarget(self, action: #selector(arrowLeftBtnClick), for: .touchUpInside)
return btn
()
func arrowLeftBtnClick()
let collectionBounds = self.collectionView?.bounds
let contentOffset = CGFloat(floor((self.collectionView?.contentOffset.x)! - (collectionBounds?.size.width)!))
self.moveToFrame(contentOffset: contentOffset)
let arrow_rightBtn: UIButton =
let btn = UIButton()
btn.setImage(UIImage(named: "arrow_right"), for: .normal)
btn.addTarget(self, action: #selector(arrowRightBtnClick), for: .touchUpInside)
return btn
()
func arrowRightBtnClick()
let collectionBounds = self.collectionView?.bounds
let contentOffset = CGFloat(floor((self.collectionView?.contentOffset.x)! + (collectionBounds?.size.width)!))
self.moveToFrame(contentOffset: contentOffset)
func moveToFrame(contentOffset : CGFloat)
let frame: CGRect = CGRect(x : contentOffset ,y : self.collectionView!.contentOffset.y ,width : self.collectionView!.frame.width,height : self.collectionView!.frame.height)
self.collectionView?.scrollRectToVisible(frame, animated: true)
func setupLeftAndRightArrow()
view.addSubview(arrow_leftBtn)
view.addSubview(arrow_rightBtn)
view.addConstraintsWithFormat("H:|-20-[v0(20)]", views: arrow_leftBtn)
view.addConstraintsWithFormat("V:|-180-[v0(20)]|", views: arrow_leftBtn)
view.addConstraintsWithFormat("H:[v0(20)]-30-|", views: arrow_rightBtn)
view.addConstraintsWithFormat("V:|-180-[v0(20)]|", views: arrow_rightBtn)
【问题讨论】:
您想隐藏用于滚动UICollectionView
的下一个和上一个按钮?
看到这个***.com/questions/29362915/…
当左侧没有更多项目时,预览按钮将隐藏,当右侧没有更多项目时,下一个按钮将隐藏
@user3589771 我编辑了我的问题,请再检查一遍
@user3589771 我添加了项目图片,请查看
【参考方案1】:
实现UICollectionViewDelegate
方法:
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)
arrow_rightBtn.isHidden = (indexPath.row == collectionView.numberOfItems(inSection: 0) - 1)
arrow_leftBtn.isHidden = (indexPath.row == 0)
这将在最后一个单元格可见时隐藏arrow_rightBtn
,并在第一个单元格可见时隐藏arrow_leftBtn
。
【讨论】:
来这里***.com/questions/48970198/… @QuietIslet 你能解释一下你提供的链接吗?我不明白。 如何在tableview单元格中只检测一个按钮,这里检测多个按钮,***.com/questions/48970198/… @QuietIslet 我已经在提供的链接中回答了您的问题。如果您仍然遇到任何问题,请查看并告诉我。【参考方案2】:您可以使用 collectionView 委托方法来检测第一个最后一个单元格
override func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath)
if indexPath.row == dataSource.count - 1
// Last cell is visible
leftBtn.isHidden = false
rightBtn.isHidden =true
else if indexPath.row == 0
// First cell is visible
leftBtn.isHidden = true
rightBtn.isHidden = false
else
//for others cells
leftBtn.isHidden = false
rightBtn.isHidden =false
【讨论】:
qustion是关于隐藏滑动左右键 @Baig 感谢尝试。我添加了项目的图像,请检查它 我明白了,当collectionView的第一个单元格可见时你可以隐藏左键,同样当collectionView的最后一个单元格可见时隐藏右键 @AzmalTech 请查看更新后的答案,可能会给您一些想法以上是关于在collectionView中完成移动后无法隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章
使用动画更改 CollectionView 位置,但在第一次滚动时向后移动
在 CollectionView -Objective-C 中显示/隐藏单元格