概要
UITableViewCell 内にある UILabel を自動で改行する際にちょっとハマったの紹介します
UI は Storyboard で作成し IBOutlet を使ってコード連携している環境を想定しています
環境
- Xcode 7.3.1
- iOS 9.3.1
- Swift 2.2
状況
Storyboard 上の構成は以下のような感じです
この状況で普通に UILabel を改行させようとしたら普通は Storyboard の Lines を「0」にすると思います
こんな感じ
自分はこの設定でうまく改行できない状況が発生しました
対応方法
原因は 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 件のコメント:
コメントを投稿