2017年2月27日月曜日

UITableViewCell 内の UILabel のテキストを改行する方法

概要

UITableViewCell 内にある UILabel を自動で改行する際にちょっとハマったの紹介します
UI は Storyboard で作成し IBOutlet を使ってコード連携している環境を想定しています

環境

  • Xcode 7.3.1
  • iOS 9.3.1
  • Swift 2.2

状況

Storyboard 上の構成は以下のような感じです
uilabel_storyboard.png

この状況で普通に UILabel を改行させようとしたら普通は Storyboard の Lines を「0」にすると思います
こんな感じ
uilabel_configration_lines.png

自分はこの設定でうまく改行できない状況が発生しました

対応方法

原因は UITableViewCell のテキストの設定方法に間違いがあっため改行できない状況が発生していました
UILabel のテキストの設定はコード側で行っています

func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) {
    let item = self.items[indexPath.row] as MWFeedItem
    cell.textLabel?.text = item.title
}

これだと UITableViewCell に設定できるテキストに直接テキストを設定してしまうことになり、セル内にある UILabel にテキストを設定していないことになります
なので以下のように書き換えました

func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) {
    let item = self.items[indexPath.row] as MWFeedItem
    let label = cell.viewWithTag(2) as! UILabel
    label.text = item.title
}

cell というオブジェクトから viewWithTag で Storyboard 上で割り当てた UILabel のタグ情報を元に UILabel のオブジェクトを取得して、そのオブジェクトのテキストに対して設定することで無事改行させることができました

最後に

よくよく考えれば当たり前のミスをしていました
本来設定するべきオブジェクトに設定しないで全然別のオブジェクトに設定していたので、、、

当初は Storyboard 上の Lines の設定がおかしいと思い 0 以外の値にしたり、UILabel の高さが低いから改行されないで表示されているのではといろいろと疑いました
が、結局は Swift のコードが側が悪いということに気が付きました

0 件のコメント:

コメントを投稿