【问题标题】:UIScrollView, detect scrollable area height without scrolling all the way downUIScrollView,检测可滚动区域高度,无需一直向下滚动
【发布时间】:2019-03-13 04:15:54
【问题描述】:

当用户滚动 50% 的 scrollView 内容时,我正在尝试记录一些事件。

我可以使用 scrollView.contentOffset.y 获取滚动量,如下所示:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"%f",scrollView.contentOffset.y);
}

斯威夫特:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print(scrollView.contentOffset.y)
}

当我向下滚动到 scrollView 的底部时,一旦我到达底部,我就可以知道 contentArea 的高度,假设值为 2000,我可以硬编码 1000 的值,因为我只在用户超过时才感兴趣整个 contentSize 的 50%。

但我希望它是动态的,因为 tableView 的 dataSource 将来可能会发生变化,这会导致 scrollView 的底部偏移量大于或小于 2000。

我想知道是否可以在滚动到底部之前检测到 tableView 的最大 contentOffset 值?

提前致谢。

【问题讨论】:

  • 如果您使用的是非分段的 tableView,collectionView 可能会更好地检查 willDisplayCell 或 cellForRow 并检查 indexPath 是否“是”在您的对象中间以及单元格是否具有相同的高度。如果不是,并且您使用 UITableViewAutomatic Dimension,那么我认为不可能提前确切知道它。如果您知道单元格的高度,您可以通过计算得出。
  • 根据您的问题,听起来您有动态大小的行/单元格,具有动态数据源,是吗?如果是这样,请从逻辑上考虑...您在问“如何在不渲染所有行的情况下获得所有可变大小行的总高度?”简单的回答:你不能,真的。您可以编写一个函数来遍历整个数据集并手动计算高度,但这可能适用于您的数据,也可能不适用。
  • 是的,我会尝试有一个解决方法,如果我可以实现一个,我会在这里发表评论,谢谢大家。
  • UIScrollView 有一个名为“contentSize”的属性。 developer.apple.com/documentation/uikit/uiscrollview/… 您可以在填充表格视图后使用它来获取表格视图可以采用的总高度。建议您测试一次。
  • 是的,这就是我需要的@kerry,非常感谢!

标签: ios objective-c swift uitableview uiscrollview


【解决方案1】:

UIScrollView 有一个名为“contentSize”的属性。

https://developer.apple.com/documentation/uikit/uiscrollview/1619399-contentsize

您可以在填充表格视图后使用它来获得表格视图可以采用的总高度。

注意:这仅在您的行具有恒定高度而不是可变高度时才有效

【讨论】:

  • OP 正在寻找 tableView 的内容大小...如果表格使用自动调整单元格/行(可变高度),内容大小将更改随着表格的滚动。
  • @DonMag 感谢您的更正。我已经编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多