UICollectionViewのCellをXibファイルでカスタムしたいと思っています。
そのため、
import UIKit class DayCell: UICollectionViewCell { @IBOutlet weak var dayLabel: UILabel! override func awakeFromNib() { super.awakeFromNib()! // Initialization code } }
のようなCell用のファイルとXibファイルを作成しました。
Cellの中にLabelを追加し、Labelの大きさはCellの大きさいっぱいになるように、上の画像のような制約を追加しました。
Cellの大きさは画面に合わせた可変サイズになるように下記のように設定しました。
(Cellの配置の仕方としては時間割アプリのような配置を想定しています。)
extension ViewController: UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { //baseViewはrootViewのsubViewでSpacing to nearest neighborを上下左右0に設定 //gridMarginはCell間の余白でCGFloat: 1.0に設定 let baseWidth = baseView.frame.width let baseHeight = baseView.frame.height //一列に存在する余白の数 let numberOfMargin: CGFloat = 5 let totalGridWidthMargin = gridMargin * numberOfMargin let totalGridHeightMargin = gridMargin * 6 //何時限目かを表すCellの横幅 let classWidth = (baseWidth - totalGridWidthMargin) * 0.1 //曜日のCellの高さ let weekHeight = baseHeight * 0.08 //時間割のCellの高さ let timeTableWidth = (baseWidth - classWidth - totalGridWidthMargin) / CGFloat(numberOfWeek) let timeTableHeight = (baseHeight - weekHeight - totalGridHeightMargin) / 6 switch indexPath.section { case 0: if (indexPath.row == 0) { return CGSize(width: classWidth, height: weekHeight) } else { return CGSize(width: timeTableWidth, height: weekHeight) } case 1: if (indexPath.row % 6 == 0){ return CGSize(width: classWidth, height: timeTableHeight) } else { return CGSize(width: timeTableWidth, height: timeTableHeight) } default: return CGSize(width: 0, height: 0) } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return gridMargin } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return gridMargin } }
理想としては、このようなCellのなかにLabelをCellのサイズいっぱいに広げるように配置したいです。
しかし、最初に述べたような制約を課すと
このように、UICollectionViewDelegateFlowLayout
で設定したCellのサイズではなくなってしまいます。
これはどういった原因が考えられるのでしょうか?
回答2件
あなたの回答
tips
プレビュー