0

UICollectionView (実際には PSUICollectionView) を使用するプロジェクトに取り組んでおり、このコレクション ビューの上部に UISearchBar を追加しました。私が今したいことは、ユーザーがプルダウンするまでデフォルトでこの検索バーをスクロールすることです。この動作は UITableView で非常に簡単に実行できますが、UICollectionView の contentSize は viewDidAppear まで初期化されません!! したがって、contentOffset の Y を検索バーの高さに設定しても、viewDidAppear で行われない限り効果はありません (これは私が望んでいるものではありません)。誰かが UICollectionView で UISearchBar を使用し、デフォルトでスクロールしないようにする方法を見つけましたか?

ありがとう!-アミット

4

6 に答える 6

0

質問に対する回答はありませんでしたが、最終的にやったことを投稿します。スクロールビューを使用して、検索バーとコレクションビューをサブビューとしてスクロールビューに追加しました。これがソリューションの核心ですが、実際にうまく機能させるのは非常に難しいことです。コレクションビューをサブビューとして追加するときに行う必要があるのは、フレームの高さをcontentSizeと同じにすることです。これにより、コレクションビュー自体がスクロールせず、スーパービューがスクロールを処理するようになります。もう1つ覚えておくべきことは、UITableViewとは異なり、UICollectionViewオブジェクトはviewDidAppearまでcontentSizeを更新しないということです。そのため、viewWillAppearで偽のフレームとcontentSizeを設定してから、viewDidAppearで再調整する必要がありました。

于 2013-02-04T23:03:19.450 に答える
0

私はこのトリックを使用することになります:

ビューdidloadでインセットを調整し、ビューdidappearで再度リセットし、同様にコンテンツオフセットを設定します。

ViewDidLoad:

[self.mainCollectionView setContentInset:UIEdgeInsetsMake(-44, 0, 0, 0)];
firstTime = TRUE;

viewDidAppear:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];


    if (firstTime) {
        [self.mainCollectionView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
        [self.mainCollectionView setContentOffset:CGPointMake(0, 44)];
        firstTime = FALSE;
    }
}
于 2014-06-24T11:13:17.530 に答える
0

コレクションビューがコレクションビューコントローラーに追加された方法、またはそのコレクションビューコントローラーが別のビューコントローラーによって提示される方法に問題があるように思えます。カスタム ビュー コントローラー コンテインメントを使用していますか? その場合は、必ず childViewControllers (collectionView など) に、親に追加されたことを通知してください。

これらのいずれでもない場合は、viewDidAppear に到達する前にデータ オブジェクトが読み込まれていない可能性があります。それらを手動で配列にロードしている場合、いつ reloadData を呼び出しますか? NSFetchedResultsController を使用している場合は、ビューが表示される前に fetchedObjects があることを確認してください。これは contentSize の計算に必要です。

UICollectionViewFlowLayout をサブクラス化しましたか? もしそうなら、ビューが表示される前に prepareLayout を呼び出していますか?

答えはあまりありませんが、問題がいくつかの場所にある可能性があるようです。

于 2013-02-08T06:01:44.057 に答える
0

遅延を追加してからこのメソッドを呼び出すことで、同様のことを行いました。

[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
于 2013-03-07T00:29:51.720 に答える