Swiftビギナーで、CollectionViewのレイアウトについて、よく理解できていません。
前提・実現したいこと
CollectionViewの列数を7にしたいです。
ここに質問の内容を詳しく書いてください。
Swiftでカレンダーアプリを作成したいと考えています。
そこで、試しにCollectionViewCellに順番に数字を表示させる画面を作成しているところです。
下記の通り、レイアウトに関するコードを記入しiPone11 ProMax, iPhone8, iPad(7th generation)でcellを1行あたり7列に表示させることができましたが、疑問点が残っています。
疑問点(2点あります)
以下のコードについて、
0. なぜ8で割ることで、7列表示されるのか。
0. なぜ余白を -2 とする必要があるのか。
let width = self.view.frame.width / 8 - 2
私の考えでは、7で割れば7列になると予想していました。
2.については、-2を記入しない場合、iPone11 ProMax, iPhone8では6列表示となってしまいました。
該当のソースコード
Swift
1import UIKit 2 3class ViewController: UIViewController,UICollectionViewDelegate, UICollectionViewDataSource { 4 let layout = UICollectionViewFlowLayout() 5 6 let items = ["0", "1", "2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"] 7 8 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 9 return items.count 10 } 11 12 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 13 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell 14 cell.label.text = items[indexPath.item] 15 cell.backgroundColor = .green 16 return cell 17 } 18 @IBOutlet weak var collectionView: UICollectionView! 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 let width = self.view.frame.width / 8 - 2 23 layout.itemSize = CGSize(width: width, height: 80) 24 25 collectionView.collectionViewLayout = layout 26 } 27}
試したこと
上記のコードでシュミレーターを起動(iPhone8)した場合、7列表示になる。
一方で、
let width = self.view.frame.width / 8 ``` としてシュミレーターを起動(iPhone8)すると、6列になる。  ### 補足 色々試してみて、7列表示させる方法を見つけましたが、なぜそのコードで7列表示されるのか理解できていません。 結果オーライだと、後々苦労しそうなので、疑問を解決したいです。 恐れ入りますが、ご教授の程よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/12 02:15