いつもお世話になっております。
UITableViewのセルをカスタムセルとして作っており、そのセルを表示する際に、高さに合わせてUITableViewの高さを変更したいのですがうまくいきません。
調べた所
tableView.rowHeight = UITableViewAutomaticDimension
を使うように書いてある記事が多く以下のように記述したのですが、テーブルビューの高さは変わらず文字が下のセルにはみ出して表示してしまいます。
カスタムセルは左側に画像、右側にタイトルラベルと説明ラベルで構成されております。
StoryBoardは使用せずコードのみで作成しております。
正しい書き方をご教示いただければと思います。
よろしくお願いいたします。
環境
Xcode8.3.2
Swift3.0
Swift
1 2HomeViewController.swift 3 4 5import UIKit 6 7class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 8 9 // テーブルビュー 10 var tableView: UITableView! 11 12 // 画像ファイルの名前 13 let imageNames = ["1.jpeg", "2.jpeg", "3.jpeg", "4.jpeg"] 14 15 // 画像のタイトル 16 let imageTitles = ["A", "B", "C", "D"] 17 18 // 画像の説明 19 let imageDescriptions = [ 20 "短い文章", 21 "短い文章", 22 "長い文章〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜", 23 "長い文章〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜" 24 ] 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 self.view.backgroundColor = UIColor.white 29 30 // テーブルビュー初期化、関連付け 31 tableView = UITableView() 32 tableView.frame = CGRect(x: 0, y: 50, width: 320, height: 400) 33 tableView.delegate = self 34 tableView.dataSource = self 35 tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "customCell") 36 tableView.estimatedRowHeight = 50 37 tableView.rowHeight = UITableViewAutomaticDimension 38 self.view.addSubview(tableView) 39 } 40 41 42 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 43 return self.imageNames.count 44 } 45 46 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 47 let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell 48 cell.myImageView.image = UIImage(named: imageNames[indexPath.row]) 49 cell.myTitleLabel.text = self.imageTitles[indexPath.row] 50 cell.myDescriptionLabel.text = self.imageDescriptions[indexPath.row] 51 cell.myDescriptionLabel.sizeToFit() 52 return cell 53 } 54 55 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 56 print("セルを選択しました! #(indexPath.row)!") 57 } 58 59 60 override func didReceiveMemoryWarning() { 61 super.didReceiveMemoryWarning() 62 } 63} 64 65 66 67 68 69CustomTableViewCell.swift 70 71 72 73import UIKit 74 75class CustomTableViewCell: UITableViewCell { 76 77 /// イメージを表示するImageView 78 var myImageView: UIImageView! 79 /// タイトルを表示するLabel 80 var myTitleLabel: UILabel! 81 /// 説明を表示するLabel 82 var myDescriptionLabel: UILabel! 83 84 85 override init(style: UITableViewCellStyle, reuseIdentifier: String!){ 86 //First Call Super 87 super.init(style: style, reuseIdentifier: reuseIdentifier) 88 89 myImageView = UIImageView() 90 myImageView.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 91 myImageView.backgroundColor = UIColor.purple 92 self.addSubview(myImageView) 93 94 myTitleLabel = UILabel() 95 myTitleLabel.frame = CGRect(x: 60, y: 0, width: 100, height: 20) 96 myTitleLabel.backgroundColor = UIColor.red 97 self.addSubview(myTitleLabel) 98 99 myDescriptionLabel = UILabel() 100 myDescriptionLabel.frame = CGRect(x: 60, y: 25, width: 100, height: 20) 101 myDescriptionLabel.backgroundColor = UIColor.blue 102 myDescriptionLabel.numberOfLines = 0 103 self.addSubview(myDescriptionLabel) 104 } 105 106 required init(coder aDecoder: NSCoder){ 107 super.init(coder: aDecoder)! 108 } 109 110 override func setSelected(_ selected: Bool, animated: Bool) { 111 super.setSelected(selected, animated: animated) 112 113 // Configure the view for the selected state 114 } 115 116}