🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

3346閲覧

カスタムセルの高さを動的に変更したい

yoshiSwift

総合スコア34

Swift

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

0グッド

0クリップ

投稿2019/12/14 11:17

前提・実現したいこと

カスタムセルに画像を0〜2つ表示させ、その個数にセルの高さを対応させたいと考えています。

条件
・カスタムセルに0〜2つの画像が表示される。
・画像の大きさは、適当に(width: 100, height: 100)としている。
・画像が複数ある場合は、縦に並べる。

現段階での解決方法は、
①カスタムセルに画像をセットした後、その画像の高さの合計をカスタムセル内のcellHeightプロパティに保存。
②cellForRowAt内でカスタムセルからcellHeightの値を取得。
③tableView.rowHeightにcellHeightの値を設定。
としております。

理想のコードとしては、
カスタムセルから画像がはみ出さずに、カスタムセルの高さが自動的に変更される。
というような、コードを書きたいと思っております。

現時点のコードのような書き方以外で、セルごとに高さを変えられるような書き方はありますでしょうか?
よろしくお願い致します(>人<;)

該当のソースコード

class CustomTableViewCell: UITableViewCell { var firstImageView: UIImageView! var secondImageView: UIImageView! var cellHeight: CGFloat = 0 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) firstImageView = UIImageView() secondImageView = UIImageView() firstImageView.translatesAutoresizingMaskIntoConstraints = false secondImageView.translatesAutoresizingMaskIntoConstraints = false firstImageView.contentMode = .scaleAspectFit secondImageView.contentMode = .scaleAspectFit let userImageSize = CGSize(width: 100, height: 100) firstImageView.bounds = CGRect(x: 0, y: 0, width: userImageSize.width, height: userImageSize.height) secondImageView.bounds = firstImageView.bounds self.addSubview(firstImageView) self.addSubview(secondImageView) } override func layoutSubviews() { guard firstImageView.image != nil else { return } firstImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true firstImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true firstImageView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true firstImageView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true cellHeight += firstImageView.frame.height guard secondImageView.image != nil else { return } secondImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true secondImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true secondImageView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true secondImageView.topAnchor.constraint(equalTo: firstImageView.bottomAnchor).isActive = true cellHeight += secondImageView.frame.height } }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell let item = dataArray[indexPath.row] cell.setCell(first: item.firstImage, second: item.secondImage) cell.layoutIfNeeded() tableView.rowHeight = cell.cellHeight return cell }

試したこと

UITableView.automaticDimenssionを使ってみたのですが上手くいきませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

tableViewのheightForRowAtメソッドで出来ますね。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if dataArray.count >= 2 { return 100 //画像の数が2つ以上だったら100を指定 } else { return 50 //それ以外だったら50を指定 } }

投稿2019/12/15 18:40

akaakoz

総合スコア183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問