5

UILabelがUITableViewCellsのすべてのテキストを表示していないiOS 8ベータ4(およびベータ5も)に問題があります。これを作成するために自己サイジング セルを使用し、すべてのデバイスに対して 1 つのストーリーボードを使用しました。

これが私がiPhoneで得たものです:-

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 をラベルに送信する必要があります。

4

2 に答える 2

0

制約を介してテーブルビューにかなり大きなマージンを追加しています。これは端までの距離です。この距離を 8 または に設定するStandardと、この距離はなくなります。これで高さの問題も解決するはずTableViewCellです。そうでない場合は、次のコードを確認してください。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let label = // Get the label from the cell here
    return label.frame.size.height + 16 // Assuming you have 2 constraints on top & bottom, each 8
}
于 2015-03-22T21:07:38.900 に答える