【问题标题】:iOS 11, iPhone X. UIScrollView bounces in a wrong direction when setting contentOffsetiOS 11,iPhone X。设置 contentOffset 时 UIScrollView 弹跳方向错误
【发布时间】:2017-12-20 18:30:44
【问题描述】:

我在 iPhone X、iOS 11.2(模拟器)上遇到了 UIScrollView 的问题

我注意到如果我不设置scrollView.contentInsetAdjustmentBehavior = .never 就会发生这种情况。

我想实现一个简单的向上滚动元素并在其中滑动另一个元素的动画。显然,当我将contentOffset 动态更改为(0, 546) 时,我得到了一点反弹(查看图片):

这似乎已被日志证实:

scrollToBottom: insets top: 0.00; bottom: 74.00; left: 0.00; right: 0.00;
scrollToBottom: yPos 546.0
scrollToBottom: contentSize(375.0, 1240.0) self.height 768.0
scrollViewDidScroll: contentOffset (0.0, 496.333333333333)
scrollViewDidScroll: contentOffset (0.0, 486.0)
scrollViewDidScroll: contentOffset (0.0, 487.0)
scrollViewDidScroll: contentOffset (0.0, 489.0)
scrollViewDidScroll: contentOffset (0.0, 491.333333333333)
scrollViewDidScroll: contentOffset (0.0, 494.333333333333)
scrollViewDidScroll: contentOffset (0.0, 498.0)
scrollViewDidScroll: contentOffset (0.0, 501.666666666667)
scrollViewDidScroll: contentOffset (0.0, 506.0)
scrollViewDidScroll: contentOffset (0.0, 510.333333333333)
scrollViewDidScroll: contentOffset (0.0, 514.333333333333)

如您所见,在 496 -> 486 -> 开始时大约有 10 个单位反弹,现在正在增加。

如果(使用完全相同的代码)我插入更大的元素 - 一切都很好(检查图片):

还有日志:

scrollToBottom: insets top: 0.00; bottom: 214.00; left: 0.00; right: 0.00;
scrollToBottom: yPos 826.0
scrollToBottom: contentSize(375.0, 1380.0) self.height 768.0
scrollViewDidScroll: contentOffset (0.0, 498.666666666667)
scrollViewDidScroll: contentOffset (0.0, 506.0)
scrollViewDidScroll: contentOffset (0.0, 518.333333333333)
scrollViewDidScroll: contentOffset (0.0, 534.666666666667)
scrollViewDidScroll: contentOffset (0.0, 555.0)
scrollViewDidScroll: contentOffset (0.0, 578.666666666667)
scrollViewDidScroll: contentOffset (0.0, 604.666666666667)
scrollViewDidScroll: contentOffset (0.0, 632.333333333333)
scrollViewDidScroll: contentOffset (0.0, 661.0)

这方面的代码相当简单:设置初始元素,设置内容偏移量,获取完成动画的委托调用,滑入新元素。

如果我关闭内容插入调整行为,它似乎不会发生,但在这种情况下,我必须自己处理插入。这似乎不会在装有 iOS 11.1 的 iPhone 6 上发生。

您有什么想法为什么会发生这种情况以及如何解决它?

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案1】:

    回答我自己的问题。

    问题出在 iPhone X 上 contentSizecontentOffset 计算的组合中。

    我正在计算偏移量,然后重新计算contentSize。 “新”contentSize 存在差异,因此当我尝试滚动 (setContentOffset(_:animated:)) 时,我同时稍微更改了contentSize(在日志中可以看到 10 个点)并获得反弹效果。

    显然对于较大的滚动距离,10 个点并不那么重要,因此它们被“插值”了。

    【讨论】:

      【解决方案2】:

      只需设置 ContentInsets - scrollView\tableView 的自动

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 2021-12-08
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多