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

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

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

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

Q&A

解決済

1回答

3099閲覧

カスタムセルの高さを自動調節

gtime

総合スコア51

Swift

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

0グッド

0クリップ

投稿2017/04/27 15:09

http://yuu.1000quu.com/use_a_custom_cell_in_swift
この記事を参考にしてこのような感じのカスタムセルを作りました

swift

1ViewController.swift 2import UIKit 3 4class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 5 6 @IBOutlet weak var tableview: UITableView! 7 8 let imageNames: [String] = ["https://pbs.twimg.com/profile_images/853593889633992706/gszvGP-0.jpg"] 9 let testlabel: [String] = ["testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"] 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 self.tableview.estimatedRowHeight = 100.0 13 self.tableview.rowHeight = UITableViewAutomaticDimension 14 } 15 16 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 17 return imageNames.count 18 } 19 20 /// セルに値を設定するデータソースメソッド(必須) 21 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 22 // セルを取得 23 let cell = tableView.dequeueReusableCell(withIdentifier: "cells") as! CustomTableViewCell 24 25 // セルに値を設定 26 cell.setCell(IconImage: imageNames[indexPath.row], testlabel: testlabel[indexPath.row]) 27 28 return cell 29 } 30}

swift

1CustomTableViewCell.swift 2import UIKit 3 4class CustomTableViewCell: UITableViewCell { 5 @IBOutlet weak var cellimg: UIImageView! 6 @IBOutlet weak var celllabel: UILabel! 7 8 override func awakeFromNib() { 9 super.awakeFromNib() 10 } 11 12 override func setSelected(_ selected: Bool, animated: Bool) { 13 super.setSelected(selected, animated: animated) 14 } 15 func setCell(IconImage: String, testlabel: String) { 16 let url = NSURL(string: IconImage) 17 let req = NSURLRequest(url:url! as URL) 18 19 NSURLConnection.sendAsynchronousRequest(req as URLRequest, queue:OperationQueue.main){(res, data, err) in 20 21 let image = UIImage(data:data!) 22 self.cellimg.image = image 23 self.celllabel.text = testlabel 24 } 25 cellimg.image = UIImage(named: IconImage) 26 } 27}

セルに表示するテキストは長い文章のため、セルの高さを自動調節するために
ViewController.swiftに
self.tableview.estimatedRowHeight = 100.0
self.tableview.rowHeight = UITableViewAutomaticDimension
を追加し、
その文章の表示に使われるLabelにAutolayoutを設定し、Linesも0に設定しましたイメージ説明
しかし、ビルドして確認してみるとこうなってしまいます。
イメージ説明
カスタムセルで長い文章を複数行表示し、セルの高さを自動調節するにはどのようにすれば良いでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

通信が非同期で行われてセルの自動の高さ計算の時に間に合っていないですね。
簡単にやるのでしたら、表示する文字列は決まっているので以下の様に先に設定すれば高さがちゃんと反映されます。

swift

1func setCell(IconImage: String, testlabel: String) { 2 3 // ↓ テキストは通信前に設定 4 self.celllabel.text = testlabel 5 6 let url = NSURL(string: IconImage) 7 let req = NSURLRequest(url:url! as URL) 8 9 NSURLConnection.sendAsynchronousRequest(req as URLRequest, queue:OperationQueue.main){(res, data, err) in 10 11 let image = UIImage(data:data!) 12 self.cellimg.image = image 13 } 14 cellimg.image = UIImage(named: IconImage) 15}

投稿2017/04/27 16:18

_Kentarou

総合スコア8490

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

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

gtime

2017/04/28 05:49

セルの高さ計算が間に合ってなかったのが原因でしたか 解決しました ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問