如何在 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") 处,它打印正确的值。所以看起来这个函数之后值发生了变化。

【问题讨论】:

您的收藏视图的滚动方向是否设置为水平? 是的。它是带有 .horizo​​ntal 的普通 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?

如何在 Swift 中更改结构属性

如何在 Swift 中更改 UILabel 的字体大小?

如何在 swift 2.2 中更改 pickerview 中的文本/字体大小?

如何在 swift 4 中更改 NavBar 标题文本颜色?