UICollectionView.scrollToItemAtIndexPath动画与虚拟键盘很奇怪

时间:2016-04-24 07:20:03

标签: ios uicollectionview uikit

当我通过键盘打开方式调用scrollToItemAtIndexPath方法滚动到底部时,

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

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

Weird animation

首先向下滚动到最后,然后再向上滚动,然后再向下滚动到最后。为什么会发生这种情况?我该如何解决这个问题?

我检查过这是在iOS 9.3模拟器中发生的。

1 个答案:

答案 0 :(得分:1)

UICollectionViewcontentInsets.top != 0时显示此行为。 我没有明确地设置它,但它已由UIViewController自动设置。可以通过设置automaticallyAdjustsScrollViewInsets属性来禁用此功能。

automaticallyAdjustsScrollViewInsets = false
然后奇怪的动画神奇地消失了。无论如何,现在我的集合视图没有顶部空间,因此渲染效果不佳。

Badly rendered UI

要使其正常工作,只需手动设置插入。

// 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

或者你可以放一个空的部分。或者其他什么。

现在它正常运作。

Good animation