UILabelがUITableViewCellsのすべてのテキストを表示していないiOS 8ベータ4(およびベータ5も)に問題があります。これを作成するために自己サイジング セルを使用し、すべてのデバイスに対して 1 つのストーリーボードを使用しました。
これが私がiPhoneで得たものです:-
コード:-
ViewController.swift
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "cell")
self.tableView.estimatedRowHeight = 200
self.tableView.rowHeight = UITableViewAutomaticDimension
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell
switch indexPath.row {
case 0:
cell.label.text = "hello hello hello hellohellohellohellohello hello hello hello hello hello hello hello hellohellohello hellohello hellohellohellohellohello hello hello hello hello hello hello hello hello hello hello hello hello hellohellohello hello hello hello"
case 1:
cell.label.text = "doesn'twork doesn'tworkdoesn't work doesn'twork doesn'tworkdoesn't work doesn'twork doesn'twork doesn't workdoesn't workdoesn'twork doesn'twork doesn't workdoesn't workdoesn't workdoesn'twork "
case 2:
cell.label.text = "baims baimsbaimsbaims baimsbaimsbaimsbaims baims baimsbaims baimsbaimsbaimsbaims baimsbaims baims baimsbaimsbaims baimsbaims baims baimsbaimsbaimsbaims baimsbaims baimsbaims baimsbaims"
default:
cell.label.text = "hello hello hello hellohellohellohellohello hello hello hello hello hello hello hello hellohellohello hellohello hellohellohellohellohello hello hello hello hello hello hello hello hello hello hello hello hello hellohellohello hello hello hello"
}
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
return cell
}
TableViewCell.swift
var label : UILabel!
var didUpdateConstraints = false
override init(style: UITableViewCellStyle, reuseIdentifier: String) {
self.label = UILabel()
self.label.textColor = self.label.tintColor
self.label.numberOfLines = 0
self.label.setTranslatesAutoresizingMaskIntoConstraints(false)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(self.label)
}
override func updateConstraints() {
if !self.didUpdateConstraints {
self.contentView.addConstraint(NSLayoutConstraint(item: self.label, attribute: .Leading, relatedBy: .Equal, toItem: self.contentView, attribute: .Leading, multiplier: 1, constant: 20))
self.contentView.addConstraint(NSLayoutConstraint(item: self.label, attribute: .Trailing, relatedBy: .Equal, toItem: self.contentView, attribute: .Trailing, multiplier: 1, constant: 20))
self.contentView.addConstraint(NSLayoutConstraint(item: self.label, attribute: .Bottom, relatedBy: .Equal, toItem: self.contentView, attribute: .Bottom, multiplier: 1, constant: 10))
self.contentView.addConstraint(NSLayoutConstraint(item: self.label, attribute: .Top, relatedBy: .Equal, toItem: self.contentView, attribute: .Top, multiplier: 1, constant: 13))
self.didUpdateConstraints = true
}
super.updateConstraints()
}
そして、ここに私のストーリーボードがあります:-
これはベータ 4 のバグだと思いますが、リリース ノートにあるようにベータ 5 で修正される必要があります。
ベータ 5 で修正済み: 一部のビューの layoutMargins の変更により複数行のラベルの幅が変更された場合、ラベルの固有のコンテンツ サイズが無効になるべきときに無効にならない。その結果、レイアウトによってラベル (またはテキスト ビュー) が予期せず切り詰められる可能性があります。/// 回避策: layoutMargins が変更されているビューは、layoutMarginsDidChange をオーバーライドし、invalidateIntrinsicContentSize をラベルに送信する必要があります。