UICollectionView.scrollToItemAtIndexPath 动画与虚拟键盘奇怪地配合

Posted

技术标签:

【中文标题】UICollectionView.scrollToItemAtIndexPath 动画与虚拟键盘奇怪地配合【英文标题】:UICollectionView.scrollToItemAtIndexPath animation works weirdly with virtual keyboard 【发布时间】:2016-04-24 07:20:03 【问题描述】:

当我调用scrollToItemAtIndexPath 方法在键盘打开的情况下滚动到底部时,

collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .None, animated: true)

我总是得到这个奇怪的动画。

它首先向下滚动到末尾,然后再次向上滚动,然后再次向下滚动到末尾。为什么会发生这种情况,我该如何解决?

我在 ios 9.3 模拟器中检查过这种情况。

【问题讨论】:

【参考方案1】:

UICollectionView 在其 contentInsets.top != 0 时显示此行为。 我没有明确设置它,但它是由UIViewController 自动设置的。这可以通过设置automaticallyAdjustsScrollViewInsets 属性来禁用。

automaticallyAdjustsScrollViewInsets = false

然后奇怪的动画神奇地消失了。无论如何,现在我的集合视图没有顶部空间,所以渲染很糟糕。

要使其工作,只需手动设置插图。

// collectionView.contentInset.top = 20 + 44
collectionView.scrollIndicatorInsets.top = 20 + 44

但是如果我们将contentInset.top设置为非零值,它会再次显示奇怪的动画,所以你不应该设置它。相反,我们应该尝试另一种解决方法。例如,如果您使用的是流式布局,则可以调整UICollectionViewFlowLayout.sectionInset.top

collectionView.scrollIndicatorInsets.top = 20 + 44
let flowLayout = (collectionView.collectionViewLayout as? UICollectionViewFlowLayout)
flowLayout?.sectionInset.top = 20 + 44

或者您可以放置​​一个空白部分。或者其他。

现在它可以正常工作了。

【讨论】:

以上是关于UICollectionView.scrollToItemAtIndexPath 动画与虚拟键盘奇怪地配合的主要内容,如果未能解决你的问题,请参考以下文章