Swift - 如何确定 collectionView 的 scrollView.content.y?

Posted

技术标签:

【中文标题】Swift - 如何确定 collectionView 的 scrollView.content.y?【英文标题】:Swift -how is a collectionView's scrollView.content.y determined? 【发布时间】:2019-08-15 02:38:36 【问题描述】:

我有一个包含 5 个单元格的 collectionView。使用此 scrollView 方法将 collectionView 向下拖动后,我可以获得以下信息:

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) 

    let currentOffset = scrollView.contentOffset.y // 92 ???
    print("currentOffset: \(currentOffset)")

    let contentHeight = scrollView.contentSize.height // height of all the cells added together -616.310
    print("contentHeight: \(contentHeight)")

    let frame = scrollView.frame.size.height // height of the collectionView itself from it's topAnchor to it's bottomAnchor - 725
    print("frame: \(frame)")

    let maximumOffset = contentHeight - frame // -108.689453125 // distance between contentHeight (bottom of all the cells) and the frame
    print("maximumOffset: \(maximumOffset)")

contentHeight 是所有单元格加在一起的高度,即:-616.310

frame 是 collectionView 本身在它的 topAnchor 和它的 bottomAnchor 之间的高度,即:725

maximumOffset 是 contentHeight(所有单元格的底部)与框架之间的距离,即:-108.689453125

我想不通的是currentOffset(即92)是从哪里来的。

This 不是很清楚:

contentOffset

内容视图的原点与 滚动视图的原点。

拖动collectionView后,currentOffset如何确定?

在下图中底部是带有来自scrollViewDidEndDragging 方法的打印语句的调试器

不确定这是否有任何区别,但 collectionView 的 topAnchor 和 bottomAnchor 被固定到视图的 safeAreaLayoutGuide ..., constant: 0 或直接锚定到它的顶部和底部

【问题讨论】:

【参考方案1】:

在collectionView第一次被拖拽后,scrollView的左上角(0,0)距离collectionView的左上角(0,0)的顶部有多远。

所以它最初被拉高了 92 点 (0,-92) 然后放手。

【讨论】:

以上是关于Swift - 如何确定 collectionView 的 scrollView.content.y?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 UICollectionView 何时完成布局?

CollectionViews和TableView不在StackView中显示 - Swift 4

Swift 3:如何确定下载文件的网速?

iOS / Swift 3.0:如何确定 UITableView 中当前可见的行?

如何在符合 Swift 协议的同时确定要实现哪些成员

如何在 swift 初始化程序中确定 Self 类