[iPhone] UICollectionView で Grid 表示

一覧リストをマス目で表示する方法が UICollectionView です。アルバムのような写真アプリにはこのようなアイコン画像とタイトルがたくさん画面に表示できるUIが便利です。
 
collectionview_1

Swift 3.0
Xcode 8.0

 

sponsored link

UICollectionView

 
UICollectionView の設定は UITableView と同様です。セルのためのクラスを作成する方法もありますが、ここではTagを使ってより簡単に作成してみます。
 

storyboard に Collection View を設定

 
Collection View の配置
storyboard にて Collection View を View Controller に配置します。View ControllerとCollection Viewの背景を適当にGrayなどに設定しておきます。
 
スクリーンショット 2016-04-07 22.23.46

 
Collection View Cell 確認
「View」「Collection View」「Collection View Cell」を選択
Collection View Cell がない場合はユーティリティー・エリアのライブラリーから
持ってくることもできます。
 
collectionview_3

 
Cell の ID設定
Cell の Identifier を例えば「Cell」と設定します。これは後でコードの記述で使います。またエラーになったらここを忘れていないか確認しましょう。
 
スクリーンショット 2014-02-23 20.00.11
 
UIImageViewとUILabelの配置
この Cell の中に、ユーティリティー・エリアのライブラリーからUIImageView と Label を持ってきて置きます。(好みですが、Labelの背景を白の透過率40%で設定しました。)

スクリーンショット 2016-04-08 13.50.40
 

Tagの設定
 
UIImageView の View Tag を「1」に設定します。
collectionview_2
UILabel の Tag を「2」にセットします。
Tag番号は1から始めます。

collectionview_3
 

画像の設定

 
サムネイル画像を集めて、名前に@2xを追加したファイルにして、Assets.xcassets に配置します。@3xファイルも作成したいところですが、サムネイルなので大丈夫でしょう。

スクリーンショット 2016-04-08 14.14.53

ちなみに、ここで使ったファイルは全て正方形ですが、エンコード(jpg,png…)も画面サイズも異なるものです。
 

ViewController にコードを記述

 
UICollectionViewDataSource, UICollectionViewDelegate を設定
 

ViewController.swift

 

ViewController と CollectionView の紐付け

 
storyboard に戻ってCollection View を選択して
dataSource -> View Controller
delegate -> View Controller
とそれぞれ結び紐付けします。
 
collectionview_4

 
ビルドして実行すると
 
Simulator Screen Shot 2016.04.08 14.47.24
 
とりあえず表示はされていますが、セルのサイズがスクリーンと合っていません 

UICollectionViewDelegateFlowLayout

 
ICollectionViewDelegateFlowLayout を使うと画面サイズに合ったセルサイズを計算して合わせこみができます。
 
これを入れたコードです

 

UICollectionViewDelegateFlowLayoutの設定を忘れずに

またCellの幅が2列可能な大きさなのに1列で表示されているケースなどでは、CollectionView設定にあるCellの「Min Spacing」が大きすぎないか確認してください。

ss2016-10-16-12-19-28
 
 

関連ページ: