3

現在、今日の拡張機能内に CollectionView を配置しようとしています。しかし、私を悩ませていることがいくつかあります。

すべてのセルがコレクション ビューの 1 行に収まるようにしたいと考えています。したがって、アイテム数に応じて、セルの幅を計算します。

iPhone ではすべて正常に動作しますが、iPad では正しく表示されません。セルの幅が大きすぎます。だから私は私のコードをデバッグし、self.view.frame.widthまたはself.view.bounds.widthが通知センターの幅ではなく、画面の全幅を返すようです。私の細胞が大きすぎるのも不思議ではありません。私はアイテムサイズを次のように計算しています:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat count = (CGFloat)[self.collectionView numberOfItemsInSection:0];
    return CGSizeMake(self.collectionView.frame.size.width/count, 80.0);;
}

だから私の質問は、どうすればiPadの通知センターの「実際の」幅を取得できますか?

4

2 に答える 2

1

ここで推測するだけですが、UICollectionViewでの私の経験から、セルサイズを計算する必要があると思いますviewDidLayoutSubviews.

デリゲート メソッドが呼び出されると (おそらく の直後viewDidLoad:)、ビューがまだ適切にサイズ変更されていない可能性があり、そのため間違ったフレーム サイズが返されます (すべてのビュー コントローラーは全画面サイズで初期化され、後で収まるようにサイズ変更されます)。

これを行うとviewDidLayoutSubviews、collectionViews フレームが既に正しいことが保証されます。ただし、collectionView をリロードする必要があります。

于 2015-03-24T12:03:09.097 に答える
0

コレクションビューも適切にサイズ変更されていますか? self.view.bounds.size.width ではなく、collectionview の幅を使用しています。

そして、コレクションビュー作成のコード(私が想定するloadviewメソッド)とviewWillTransitionToSize/viewWillLayoutSubviews/viewDidLayoutSubviews実装のコードはありますか?

于 2015-03-24T14:13:19.937 に答える