7

セルの垂直リストを表示する UICollectionView があります。基本的にはテーブルビューですが、各セルをビューに配置する方法をより細かく制御するために、コレクション ビューを使用しています。何らかの理由で、コレクション ビューの最後のセルが切り取られています。上にドラッグして下半分を見ることができますが、放すとすぐにコレクション ビューが元の位置に戻り、最後のセルの下半分が見えなくなります。コレクションビューを含む xib があり、別の xib からコレクション ビュー セルを登録します。このビュー全体は、プログラムによってナビゲーション コントローラーに配置されます。私の考えでは、自動レイアウトの問題である必要があります。コレクション ビューを含むビュー コントローラーをナビゲーション コントローラーにプログラムで追加しているため、コレクション ビューとナビゲーション バーの間に制約は設定されていません。インスタンス化されたナビゲーション バーを非表示にして IB にドラッグすると、コレクション ビューのセルがクリップされません。しかし、私はこのようにしたくありません。プログラムで制約を追加しようとしましたが、それも機能しません。誰か提案はありますか?ここでは、ナビゲーション コントローラーを作成し、コレクション ビューを含むビュー コントローラーを配置する方法を示します。また、制約を追加するために使用しようとしたコードは include です。とりあえず、didFinishLaunchingWithOptions のアプリ デリゲートでこれを行っています。m ナビゲーション コントローラーを作成し、コレクション ビューを含むビュー コントローラーを配置します。また、制約を追加するために使用しようとしたコードは include です。とりあえず、didFinishLaunchingWithOptions のアプリ デリゲートでこれを行っています。m ナビゲーション コントローラーを作成し、コレクション ビューを含むビュー コントローラーを配置します。また、制約を追加するために使用しようとしたコードは include です。とりあえず、didFinishLaunchingWithOptions のアプリ デリゲートでこれを行っています。

self.homeViewController = [[FFHomeViewController alloc] init];
FFNavigationPanelViewController *navigationController = [[FFNavigationPanelViewController alloc] init];
UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
//    frontNavigationController.navigationBarHidden = YES;
UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:navigationController];


NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.homeViewController.collectionView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.homeViewController.navigationController.navigationBar attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];

[self.viewController.frontViewController.view addConstraint:topConstraint];
4

4 に答える 4

1

同様の問題に遭遇しました。この問題は、UICollectionView が UIScrollView のサブクラスであり、何らかの理由でコンテンツに割り当てられたスペースの量が実際のセル数に対応するように更新されていないことに起因します。

あなたの場合、アイテムの単一の列で、UICollectionViewCells のすべてを仮想的に表示するために必要なスペースの量に一致するように UICollectionView の contentSize を設定する必要があります。

セルの高さが 100 ピクセルで、セクションが 1 つしかないと仮定すると、View Controller の ViewWillAppear に次のようなものを追加します。

int itemCount = [self.collectionView numberOfItemsInSection:0];
float contentHeight = (100*itemCount)+100;
CGRect screenFrame = [[UIScreen mainScreen]bounds];
self.collectionView.contentSize = CGSizeMake(screenFrame.size.width, frameHeight);

余分な 100 を追加すると、一番下までスクロールしたときに最後に空きスペースができます。

補足: ここで奇妙なバグに遭遇した可能性があります。これらの計算を viewWillLoad|viewWillAppear|viewDidAppear のいずれかに入れても効果がないように見えましたが、奇妙なことに、numberOfItemsInSection に入れても機能ます。それは実際には適切な場所ではありませんが、プログラムで作成するのではなく、xib から collectionView をロードすることの副作用である可能性があります。

そして最後のフォローアップ: contentSize コードを viewWillLayoutSubviews に入れると、適切な動作が得られるようです。

于 2014-04-09T11:10:22.907 に答える
0

自動セル サイズの場合は、collectionView アイテムの推定サイズをカスタムに設定してみてください。これは私にとってはうまくいきました。

ここに画像の説明を入力

于 2021-05-12T05:50:32.323 に答える