[swift]UITableViewのcellに複数行の文字列を表示する

広告

目次

■UITableViewのセルに複数行を表示したい。

UITableViewの表示は、デフォルトでは複数行に対応しておらず、長い文字列を表示しようとするとトランケイト(後半を…になる)されて、全てが表示されません。

色々調べて、少し迷ってしまったので、こちらに簡単に対応をまとめます。

■まずは、現状の状況

演劇感想文リンクの画面の設計中です。

劇団のページの中に、上演記録の一覧があり、その個々をクリックすると公演の画面に移動するという設計にする予定です。

何も設定せずに表示するとこんな感じになります(劇団名、題名は適当です。題名は、僕の知る限りもっとも題名の長いテアトル・ド・アナールの舞台の題名にしました。)

スクリーンショット 2016-05-01 15.47.38

■設定すべきは、cellのlinebreakmodeとnumberoflines

UILabelの時と同様に、numberoflins=0を指定すれば、複数行に対応してくれると思い、まずはそれを設定しました。

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->  UITableViewCell {
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell") as UITableViewCell
    cell.textLabel?.numberOfLines=0
    cell.textLabel?.text="「\(公演集[indexPath.row].題名)」(\(公演集[indexPath.row].公演月())),"
    return cell
  }
スクリーンショット 2016-05-01 16.01.02

とりあえず、複数行は表示されていますが、なんか2つ目の行はcellは悲惨なことになっています。

■UITableViewのプロパティの設定が必要

どうやら、cell内の文字列をフルに表示するためには親TableViewのプロパティを設定する必要があるようです。

以下のプロパティの設定を行いました。rowHeightにUITableViewAuto〜をセットするのはわかりますが、estimatedRowHeightは、なんで設定しなければならないかよくわかりません。

呪文のようなものか(←いや、違う)

 

  override init(frame:CGRect,style: UITableViewStyle){
    super.init(frame: frame,style: style)
    self.dataSource=self
    self.delegate=self
    self.estimatedRowHeight=50
    self.rowHeight=UITableViewAutomaticDimension
  }

これで、こんな感じ。
スクリーンショット 2016-05-01 16.21.44

ようやくイメージ通りになりました。

広告

1 個のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です