文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

【Xcode】画面サイズに応じてUICollectionViewのセルのサイズを変更

f:id:an3714106:20150111211519p:plain

上記の様に画面を4分割したUICollectionViewを表示する画面を作っていたのですが、
画面サイズが変わったら当然それに合わせてセルのサイズを変えたいもの。

ところが、画面サイズに応じてUICollectionViewのセルのサイズを変更するのは
AutoLayoutからではどうもできないようです。
頑張って調べましたが、やり方が出てこない…。
(UICollectionView自体のサイズ変更はできます。
その際、セルの大きさはそのままでセル間の余白が引き伸ばされていました。)

というわけで、UICollectionViewのセルのサイズ変更はコードから行います。

/**
 *  UICollectionViewDelegateFlowLayoutのデリゲートメソッド。セルのサイズを返す
 *
 *  @param collectionView 対象のUICollectionView
 *  @param collectionViewLayout 対象のUICollectionViewLayout
 *  @param indexPath 対象のNSIndexPath
 *  @return セルのサイズ
 */
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    // 1セルあたりのサイズを計算
    CGRect screenSize = [[UIScreen mainScreen] bounds];
    NSUInteger space = 10;
    NSUInteger bar = 64;
    CGSize listCellSize = CGSizeMake((screenSize.size.width - space * 3) / 2,
                                                            (screenSize.size.height - bar - space * 3) / 2);
    return listCellSize;
}


実際には毎回計算するのは無駄なので、
viewDidLoadで一度計算して保存した値を返すだけにしています。
動かすとこんな感じになります。

f:id:an3714106:20150111220357p:plain


下記のサイト様を参考にさせていただき、Objective-Cで実装してみました。

UICollectionViewのセルのサイズを変更する。