質問するログイン新規登録
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3567閲覧

CollectionView 列数を7にしたい

so0155hh

総合スコア6

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

2クリップ

投稿2020/03/12 01:00

1

2

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列表示になる。
上記のコードでシュミレーターを起動(iPhone8

一方で、

let width = self.view.frame.width / 8 ``` としてシュミレーターを起動(iPhone8)すると、6列になる。 ![let width = self.view.frame.width / 8としてシュミレーターを起動(iPhone8)](01567f8ca021ab8be4d9b384ae043bde.png) ### 補足 色々試してみて、7列表示させる方法を見つけましたが、なぜそのコードで7列表示されるのか理解できていません。 結果オーライだと、後々苦労しそうなので、疑問を解決したいです。 恐れ入りますが、ご教授の程よろしくお願いいたします。
s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デフォルトのセル間スペースが 10px だからですね。これを 0 にして width を 7 で割ればちょうどになる(実際は微妙な隙間が入りますが)はずです。

Swift

1 layout.minimumInteritemSpacing = 0 2 layout.minimumLineSpacing = 0 3 4 let width = self.view.frame.width / 7 5 layout.itemSize = CGSize(width: width, height: 80)

投稿2020/03/12 01:49

hoshi-takanori

総合スコア7903

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

so0155hh

2020/03/12 02:15

ありがとうございます。 デフォルトのセル間スペースが 10pxになっているとのこと、理解いたしました。 layout.minimumInteritemSpacing = 0 let width = self.view.frame.width / 7 - 2 上記コードで、自分の思っていた通りのレイアウトになりました。 教えていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問