Настройка collectionView.scrollToItem рассмотреть вставку?
Я иногда прокручиваю влево от такой ячейки:
collectionView.scrollToItem(
at: IndexPath(row: 5, section: 0),
at: .left, // TODO: Left ignores inset
animated: true
)
вот как это начинается до scrollToItem
реализовано:
однако, когда я пытаюсь использовать scroll to item, он прикрепляет ячейку к краю, а не рассматривает вставку:
есть ли простой способ исправить collectionView.scrollToItem
приспособить вставки?
3 ответов
С
/**
Assumptions:
1. Your collection view scrolls horizontally
2. You are using UICollectionViewFlowLayout to layout you collection view
@param indexPath IndexPath to scroll to
@param animated Toggle animations
*/
- (void)scrollToIndexPathPreservingLeftInset:(NSIndexPath *)indexPath animated:(BOOL)animated {
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)collectionView.collectionViewLayout;
CGFloat sectionLeftInset = layout.sectionInset.left;
UICollectionViewLayoutAttributes *attri = [layout layoutAttributesForItemAtIndexPath:indexPath];
[collectionView setContentOffset:CGPointMake(attri.frame.origin.x - sectionLeftInset, 0) animated:animated];
}
Swift (не проверено синтаксически)
func scroll(toIndexPathPreservingLeftInset indexPath: IndexPath, animated: Bool) {
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
let sectionLeftInset = layout.sectionInset.left
var attri = layout.layoutAttributesForItem(at: aPath)
collectionView.setContentOffset(CGPoint(x: (attri?.frame.origin.x - sectionLeftInset), y: 0), animated: animated)
}
поскольку каждый кадр ячейки учитывает его вставку раздела, вы также можете использовать scrollRectToVisible(_:animated:).
let cell = collectionView.cellForItem(at: indexPath)!
collectionView.scrollRectToVisible(cell.frame, animated: true)
и поскольку это кадр, над которым мы работаем, вы можете настроить желаемое смещение для этого кадра.
вы можете использовать обычный метод collectionView.scrollToItem
Если вы установите отступ в collectionView.contentInset
вместо layout.sectionInset
.