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

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

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

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

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

Q&A

解決済

2回答

10804閲覧

【iOS,Swift】UITableViewのCellの高さを可変にしたい

Kesth

総合スコア83

Swift

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

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

0グッド

2クリップ

投稿2015/08/07 08:37

編集2015/08/09 08:31

投稿失礼します。
標題の件ですが、 現在アプリ開発をしており、UITableViewを使った画面の
実装を行っています。

それぞれのCustom Cellの高さをユーザーの入力によって動的に可変にしたいと思い
その方法を調べていたのですが、上手く実装することができません。

なお、Custom Cellは下記のような構成となっており
UILabel②の高さによって、CellのHeightを動的に可変にしたいと思います。

ーーーーーーーーーーーーーーー
UILabel①(高さ固定)
UIImage UILabel②(高さ可変)
UILabel③(高さ固定)
ーーーーーーーーーーーーーーー

その上で、UILabel②に対して、下記のように設定した上で

swift

1self.label②.numberOfLines = 0 2self.label②.sizeToFit( )

元となるTableViewに対して、下記のように設定しましたが
高さは動的に変化しませんでした。

swift

1tableView.estimatedRowHeight = ◯◯ 2tableView.rowHeight = UITableViewAutomaticDimension

なお、通常CellのHeightを設定する下記の関数は使用していません。

swift

1func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 2 return ◯◯ 3 }

どのように実装をすればよろしいでしょうか?
実際のコードを交えて教えて頂けると大変助かります。
よろしくお願いします。

※バージョン
iOS8, Swift1.2

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【追記】
Stripeさんへ

Stripeさんへ

swift

1import UIKit 2 3class TestTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ 4 5var tableView = UITableView(frame: CGRectZero, style: .Grouped) 6 7override func viewDidLoad() { 8 super.viewDidLoad() 9 let displayWidth = self.view.frame.width 10 let displayHeight = self.view.frame.height 11 12 tableView = UITableView(frame: CGRect(x:0, y:0, width:displayWidth, height:displayHeight)) 13 tableView.estimatedRowHeight = 60 14 tableView.rowHeight = UITableViewAutomaticDimension 15 16 } 17 18}

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

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

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

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

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

Stripe

2015/08/09 07:12

それで、Cellの高さはどのように指定していますか?
Kesth

2015/08/09 07:33

cellの高さは(tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat)を使って指定すると思いますが、この関数は使用していないので、直接Cellの高さはしていません。
Stripe

2015/08/09 07:49

Cellの高さの指定が一切無いなら、そもそも高さは可変にはならないのでは?
Kesth

2015/08/09 08:02

上記は一度試したのですが、それでも可変になりませんでした。 原因として他にどのようなことが考えられますでしょうか? 私のコードで、cellの高さに関係ありそうなもののみを抜粋して下記に記載します。 import UIKit class TestTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ var tableView = UITableView(frame: CGRectZero, style: .Grouped) override func viewDidLoad() { super.viewDidLoad() let displayWidth = self.view.frame.width let displayHeight = self.view.frame.height tableView = UITableView(frame: CGRect(x:0, y:0, width:displayWidth, height:displayHeight)) tableView.estimatedRowHeight = 60 tableView.rowHeight = UITableViewAutomaticDimension } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 50 } }
Kesth

2015/08/09 08:15 編集

こちらではコードがくずれてしまったので、上記にコードを記載しなおしました。
Stripe

2015/08/09 08:19

そのコードだと、全てのセルの高さが60になると思いますが?
Kesth

2015/08/09 08:31

heightForRowAtIndePathを指定してしまうと高さが一律になってしまいましたね、失礼しました。 cellの高さは、こちらではなくestimatedRowHeightで指定させると考え、上記のコードを再度修正してみましたが、いまだcellの高さは可変になりません。度々申し訳ありませんが、どこがおかしいでしょうか?
guest

回答2

0

iOS8なら、AutoLayoutを有効にしてConstraintsを適切に設定すれば、
heightForRowAtIndexPathを実装しなくてもラベルの高さに応じて
セルの高さを可変にできるようですが、Constraintsをちゃんと
設定していますか?

AutoLayoutを使わないなら、各セルの高さをheightForRowAtIndexPathで指定しないと
セルの高さを可変にできません。。

UITableViewのセルの高さを動的に計算するSelf-Sizing Cellsを試してみた(iOS8, Swift)
を参考にするとよいと思います。

投稿2015/08/09 14:07

編集2015/08/09 14:12
TakeOne

総合スコア6299

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

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

Kesth

2015/08/11 03:42

コメントありがとうございます! こちらの方法でも可変にすることができましたが、先に回答いただいた方をBAにさせて頂きました!わかりやすくありがとうございました。
guest

0

ベストアンサー

うまく行かないのは、そもそも個々のCellの高さを一切指定していないのが原因です。
UITableViewDelegateのfunc tableView(_ tableView: UITableView,heightForRowAtIndexPath indexPath: NSIndexPath)を実装して、indexPathごとにCellの高さを指定してください。

投稿2015/08/09 09:59

Stripe

総合スコア2183

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

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

Kesth

2015/08/10 03:09

試した所、無事可変に出来ました! ありがとうございました!
komachi

2015/09/07 06:51

私も同じ問題で悩んでいます. 既に問題は解決されたようですが, 最終的に何をしたのかご教示いただけませんでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問