1. ホーム
  2. ios

[解決済み] UICollectionViewがIndexPathのセルまで自動スクロールする件

2022-05-17 23:20:12

質問

コレクションビューを読み込む前に、ユーザーがコレクションビューの配列に画像の数を設定します。すべてのセルが画面に収まらない。30個のセルがあるのですが、画面に6個しか表示されません。

質問です。UICollectionViewの読み込み時に、目的の画像のあるセルまで自動的にスクロールさせるにはどうしたらよいでしょうか?

どのように解決するのですか?

でスクロールすることがわかりました。 viewWillAppear でのスクロールは、コレクションビューがまだレイアウトを完了していないため、確実に動作しない可能性があることがわかりました。

でのスクロールは viewDidAppear でスクロールすると、スクロールしていないビューが一瞬だけ表示されることもわかりました。

また、いちいちスクロールして viewDidLayoutSubviews を毎回スクロールする場合、コレクションレイアウトによってはスクロールするたびにサブビューレイアウトが発生するため、ユーザーは手動でスクロールすることができなくなります。

以下は、私が確実に機能することを発見したものです。

Objective Cです。

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    // If we haven't done the initial scroll, do it once.
    if (!self.initialScrollDone) {
        self.initialScrollDone = YES;
    
        [self.collectionView scrollToItemAtIndexPath:self.myInitialIndexPath
                                    atScrollPosition:UICollectionViewScrollPositionRight animated:NO];
    }
}

スウィフト.

 override func viewWillLayoutSubviews() {

    super.viewWillLayoutSubviews()

      if !self.initialScrollDone {

         self.initialScrollDone = true
         self.testNameCollectionView.scrollToItem(at:selectedIndexPath, at: .centeredHorizontally, animated: true)
    }

}