質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

4767閲覧

swiftのcollectionviewcellの高さを可変にしたい

roge

総合スコア12

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/07/05 12:16

編集2020/07/05 12:44

添付ファイルのようなcollectionviewを作成したいと考えています。
section0の最下部に存在するlabelを可変にして、section0のcell(1つ)を内容に応じて高さを可変にしたいです。
section0とsection1のcellサイズは異なります。
section0のcellのwidthはview.frame.sizeで固定。section1のcellのwidthはview.frame.size/2です。

高さ可変の部分のだけわかりません。

よろしくお願いいたします。イメージ説明

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

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

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

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

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

roge

2020/07/05 13:11

調べていただきありがとうございます。 添付ファイルのようなview(リンクにあるようなvlew)は実装できており、あとはcellの中身のlabelの高さに応じてcellサイズを動的に変更できるようにしたいと考えております。よろしくお願い致します。
退会済みユーザー

退会済みユーザー

2020/07/05 20:52

要件わからないのであれですが、section0のセルは1つしかなくて、縦方向のスクロール限定だと、headerに見える。
TsukubaDepot

2020/07/05 23:41

rogeさん: labelの高さが動的に変化するようなケースが思いつかないのですが、どのような状況を考えてらっしゃるのでしょうか。 既にコードを作られているの出れば、コードを提示された上、できない部分を明確にされた方が良いかと思います。 tyobigorouさん: たしかに、そういう考え方もありますね。スマートな方法かもしれません。
退会済みユーザー

退会済みユーザー

2020/07/06 01:19

高さ変えるのは、調べれば出てきます。 https://teratail.com/questions/47713 これは古いので、引数の表記がかわってるかな? ま、そんな感じで
roge

2020/07/06 03:44

tyobigorouさん ありがとうございます。参考にさせていただきました。
guest

回答2

0

ちゃんとAutolayoutできてるなら、高さに0を指定すればいけそうな気が。

【追記】

こちらで試してみたところ、UICollectionViewDelegateFlowLayout.sectionInsetのtopかbottomを0以外にするといけました。

swift

1@IBOutlet weak var collectionView: UICollectionView! 2@IBOutlet weak var flowLayout: UICollectionViewFlowLayout! 3 4override func viewDidLoad() { 5 super.viewDidLoad() 6 //SectionInsets 7 flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: .leastNormalMagnitude, right: 0) 8} 9 10func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 11 switch indexPath.section { 12 case 0: 13 return CGSize(width: self.view.frame.width, height: 0) 14 (以下略) 15 } 16}

投稿2020/07/06 01:26

編集2020/07/06 05:15
fuzzball

総合スコア16731

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

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

fuzzball

2020/07/06 01:36

TableViewで高さに0を指定すると、高さが0になるのではなく自動設定された記憶があるので、CollectionViewでも同じなんじゃないかなと。
roge

2020/07/06 03:55

ありがとうございます。
fuzzball

2020/07/06 03:57

ダメだったんでしょうか?Autolayout使ってない?
roge

2020/07/06 04:25

私が確認した限りではできませんでした。 Autolayoutは使用していて、labelの上に存在するviewに上左右と高さの制約、labelには上下左右の制約をつけています。
fuzzball

2020/07/06 05:16

出来るには出来たのですが、ちょっと裏技っぽくなってしまってイマイチです。 質問者さんの環境でもいけるかどうかわかりませんが‥。
roge

2020/07/06 05:30

ありがとうございます!
guest

0

自己解決

section0内のlabelと同じwidth,fontのダミーlabelを設定し、ベースの高さ(ここでは228)に行数分の高さを加えました。
行数を取得するコードは以下のリンクを参考にさせていただきました。
Qiita[UILabelの行数を調べる方法]

swift

1func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 2 if indexPath.section == 0 { 3 let tmpLabel = UILabel(frame: CGRect(x:0, y:0, width: self.view.frame.width - 40, height: 0)) 4 tmpLabel.font = UIFont.systemFont(ofSize: 15.0) 5 tmpLabel.numberOfLines = 0 6 tmpLabel.text = myself_info.count == 1 ? myself_info[0].intro : "" 7 tmpLabel.sizeToFit() 8 let line_count = CGFloat(tmpLabel.lineNumber()) 9 return CGSize(width: self.view.frame.width, height: 228 + 18 * (line_count - 1)) 10 } else { 11 // section1のレイアウト 12 } 13 }

投稿2020/07/06 03:51

roge

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問