如何在 Swift 中更改 UICollectionView 的 targetContentOffset?
Posted
技术标签:
【中文标题】如何在 Swift 中更改 UICollectionView 的 targetContentOffset?【英文标题】:How to change the targetContentOffset of a UICollectionView in Swift? 【发布时间】:2018-11-17 18:04:53 【问题描述】:在我的UIViewController
中有一个UICollectionView
。委托设置正确。它工作正常。 isPagingEnabled
设置为 true
。但是现在我想更改我在scrollViewWillEndDragging
中尝试过的分页位置,因为在文档中它说:
您的应用程序可以更改 targetContentOffset 参数的值,以调整滚动视图完成其滚动动画的位置。
这个函数被正确调用,但是当我想设置一个新的端点时唯一发生的事情,UICollectionView
滚动到 0。
这是我的代码:
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
print(scrollView.contentOffset, "actual Offset")
print(targetContentOffset.pointee, "future offset")
targetContentOffset.pointee = CGPoint(x: 100, y: 0)
print(targetContentOffset.pointee, "new future offset")
在 print("new future offset") 处,它打印正确的值。所以看起来这个函数之后值发生了变化。
【问题讨论】:
您的收藏视图的滚动方向是否设置为水平? 是的。它是带有 .horizontal 的普通 UICollectionViewFlowLayout 我不知道targetContentOffset.pointee
是什么。是可变的吗?
对不起,我的英语不是很好。你到底是什么意思?
分享targetContentOffset
的声明代码
【参考方案1】:
func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint,
withScrollingVelocity velocity: CGPoint) -> CGPoint
说明:
如果您希望滚动行为捕捉到特定的边界,您可以 可以覆盖此方法并使用它来更改要更改的点 停止。例如,您可以使用此方法来始终停止滚动 在项目之间的边界上,而不是停在中间 一个项目。
重写此布局方法,而不是直接更改 targetContentOffset 的值。
如果您希望滚动行为捕捉到特定边界,您可以覆盖此方法并使用它来更改停止点。例如,您可以使用此方法始终在项目之间的边界上停止滚动,而不是在项目中间停止滚动。
文档: https://developer.apple.com/documentation/uikit/uicollectionviewlayout/1617729-targetcontentoffset
【讨论】:
@Quintus_2 所以我认为你做了一些超出这个逻辑的事情。请分享更多细节。 我觉得我没什么特别的。你认为 UICollectionViewDelegateFlowLayout 中的 sizeForItemAt 会导致这个问题吗? 经过一些测试后,我会说我的代码中的 targetContentOffset 具有这样的行为,因为它会改变“拖动”停止的点...以上是关于如何在 Swift 中更改 UICollectionView 的 targetContentOffset?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中更改 tableView 部分中的文本颜色
如何在 Swift 中更改 UICollectionView 的 targetContentOffset?