7

UICollectionViewを使用して、画面の中央にある現在のビューの左右にビューを表示しようとしています。

これは正しく表示されていますが、デフォルトでフレームの幅である320.0に設定されているため、水平ページングは​​後続のビューの中央に配置されません。

UICollectionViewは、次のページにクリップするときに使用するデフォルトのオフセット値をどこで計算しますか?

この値を変更したいのですが。これを行うためのより良い方法はありますか?基本的に、iPhoneのアプリストアの検索結果で使用されているエクスペリエンスを再現しようとしています。

4

3 に答える 3

11

次のように設定pagingEnabled = NOして上書きする必要があることが判明しました。(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
  if (self.lastQuestionOffset > scrollView.contentOffset.x)
    self.currentPage = MAX(self.currentPage - 1, 0);
  else if (self.lastQuestionOffset < scrollView.contentOffset.x)
    self.currentPage = MIN(self.currentPage + 1, 2);

  float questionOffset = 290.0 * self.currentPage;
  self.lastQuestionOffset = questionOffset;
  [self.collectionView setContentOffset:CGPointMake(questionOffset, 0) animated:YES];
}

この回答は役に立ちました: ページ幅が異なるUIScrollViewのページング

于 2013-02-14T23:02:25.700 に答える
6

最善の解決策は、カスタム UICollectionViewFlowLayout サブクラスを追加してオーバーライドすることだと思います

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)contentOffset  
                                 withScrollingVelocity:(CGPoint)velocity

ここに例を書きました: https://gist.github.com/mmick66/9812223

于 2014-03-27T18:24:01.747 に答える
0

viewDidLayoutSubviewsで contentOffset を設定してみてください

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (viewDidLayoutSubviewsForTheFirstTime) {
        _collectionView.contentOffset = CGPointMake(...);
    }
}
于 2016-03-21T06:02:12.850 に答える