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

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

詳細はこちら
Xcode

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

Swift

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

Q&A

解決済

1回答

2149閲覧

TableViewCellの高さを自動調節したい(時刻表を作ろうとしています)

tsuyoshi0126

総合スコア24

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/10/26 02:43

編集2019/10/27 04:50

###前提・実現したいこと
私はiOSアプリ開発初めて一か月で、プログラミング経験も浅い状態です。
現在私は時刻表を作ろうとしています。
そのためTableViewCellの上にLabelを3つ配置させて、それぞれのLabelに時間帯や分刻みの時刻を振り分けようとしています。

イメージはこのような形です。
https://hajihaji-lemon.com/smartphone/swift/table-view-cell/

分刻みの時刻の値の数が多いため、Label内で改行できて
Labelの高さに合わせてTableViewCellの高さを自動調節できるようにしたいです。

###発生している問題
Label内での改行は可能になったのですが、Labelの高さに合わせてTableViewCellの高さを自動調節できません。
Labelの高さに合わせてTableViewCellの高さを自動調節できる様にするにはどの様にすればよいでしょうか

![イメージ説明
###該当のソースコード

import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var dataList = ["時,平日,土日祝日","6,1,1","7,1,1","8,1,1","9,1,1","10,1,1","11,1,1","12,1,1","13,1,1","14,1,1","15,1,1","16,1,1","17,1 2 3 4 5 6 7 8 9 10 11 12 13 14,1","18,1,1","19,1,1","20,1,1","21,1,1","22,1,1","23,1,1"] @IBOutlet weak var TableView: UITableView! override func viewDidLoad() { super.viewDidLoad() TableView.estimatedRowHeight = 5 //ここでCellの高さ自動調節を命じています TableView.rowHeight = UITableView.automaticDimension } func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TimeCell", for: indexPath) let label1 = cell.viewWithTag(1) as! UILabel let label2 = cell.viewWithTag(2) as! UILabel let label3 = cell.viewWithTag(3) as! UILabel let arr = dataList[indexPath.row].components(separatedBy: ",") label1.text = arr[0] label2.text = arr[1] label3.text = arr[2] label2.numberOfLines = 0 label2.sizeToFit() //ここで改行を命じてします return cell } func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { return dataList.count } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

Labelの高さに合わせてTableViewCellの高さを自動調節するには、CellのサイズをLabelのサイズに合わせるようにAutoLayoutを設定する必要があります。

(参考)
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

https://qiita.com/ytakzk/items/d7bb8182d43cdfc9b580

質問する際は、teratailの使い方をよく読んで、リンクやコードの部分はMarkdown記法で正しく整形して質問していただけると、質問を読む側は読みやすいです。

(参考)
https://teratail.com/help/question-tips#questionTips3-7

https://teratail.com/help#about-markdown

投稿2019/10/27 03:12

TakeOne

総合スコア6299

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

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

tsuyoshi0126

2019/10/27 06:56

回答ありがとうございます。 質問する際は、teratailの使い方をよく読んで、リンクやコードの部分はMarkdown記法で正しく整形して質問していただけると、質問を読む側は読みやすいです。 →ご指導ありがとうございます。今後気を付けさせて頂きます。 Labelの高さに合わせてTableViewCellの高さを自動調節するには、CellのサイズをLabelのサイズに合わせるようにAutoLayoutを設定する必要があります。 → こちらを実行するために TableView.estimatedRowHeight = 5 TableView.rowHeight = UITableView.automaticDimension を定義しました。 またリンク先に書かれていた To define the cell’s height, you need an unbroken chain of constraints and views (with defined heights) to fill the area between the content view’s top edge and its bottom edge. を実行するためにLabelのAdd New Constraintでcontent viewからの上下の距離を0にしたのですが、LabelがCellの左端に配置されてうまく改行、表示ができません。 AutoLayout設定がうまくできていないようなのですが、ご指導いただけますでしょうか。
TakeOne

2019/10/27 14:28

上下の距離を0にして縦方向の制約を設定するだけでなく、横方向の制約も設定してLabelの横方向の表示位置を確定させていますか? 横方向の制約もちゃんと設定してLabelの表示位置が確定されるように(AutoLayoutのエラーが出ないように)しないと、そのLabelに対する制約は、縦方向の制約含めて無効になってしまうと思います。
tsuyoshi0126

2019/10/28 00:52

回答ありがとうございます。 横の制約も付け、TableViewCellの上の3つのLabelに制約をかけたところ問題解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問