web-dev-qa-db-ja.com

Xcode 9の自己サイズ変更テーブルビューセル

Xcode 8とSwift 3.を使用してセルの自己サイズが正しく調整されたUITableViewControllerがあります。これで、Xcode 9と= Swift 4、彼らは展開していません、デフォルトの高さ44を使用しています。

(各UITableViewCellに1つまたは2つの文があります)

私はこれを前に使用していました:

// MARK: - Table view delegate

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

...しかし、 iOS 11向けアプリの更新 がデフォルトは今は自己サイズ変更になると言っているため、コメントアウトできました:

enter image description here

展開ターゲットをiOS 11に変更して、Storyboardで遊んでみました(ただし、Table View CellスタイルBasicを使用しているため、行うべきAutoLayoutはあまりありません)起こっています。

UILabelのタイトルを0行に設定し、改行を折り返しますが、Xcode 9の内部のテキストコンテンツに基づいてセルを展開するには近づきません。

ありがとう!

編集:

これは基本セルなので、固定のオプション(私にはない)です:

enter image description here

enter image description here

enter image description here

21
SRMR

私は同じ問題を抱えていて、コードの行でそれを解決しました:

class MyTableViewController: UITableViewController {
  override func viewDidLoad() {
    super.viewDidLoad()

    tableView.estimatedRowHeight = UITableViewAutomaticDimension
    tableView.rowHeight = UITableViewAutomaticDimension
  }

Xcodeのバグかもしれません。

Update

Xcode 9ベータ3の新機能:

Interface Builderは、UITableViewのestimatedRowHeightの設定をサポートするようになりました。これにより、推定高さをゼロ以外の値に設定することで、テーブルセルの自己サイズ変更が可能になり、デフォルトでオンになります。 (17995201)

19
Micha C.

同じ壊れたテーブルビューの問題がありました。修正はワンクリックでした。

テーブルビューを使用してxibまたはストーリーボードシーンに移動し、サイズインスペクターに移動すると、テーブルビューの高さ(動的なテーブルビューでも)が44になり、セクションが22になります。「自動」をクリックしてブーム、期待どおりに表示されます。

enter image description here

UITableViewControllerサブクラスのviewDidLoadで以下を指定することにも注意してください(layoutSubviewsは、tableViewControllerの最初のロードが半透明でないnavBarに対して正しく配置されない問題を解決します)。

   self.tableView.estimatedRowHeight = 180;
   self.tableView.rowHeight = UITableViewAutomaticDimension;
   self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  [self.tableView layoutSubviews];
16
Mike Critchley

私は同じ問題を抱え、多くのドキュメントでそれについて読んで、満足のいく答えはこのようなものでした。適切な高さを得るには両方のオプションをチェックする必要があります。スクロールビューバーなどの初期UI設定には推定高さが必要です。

行の高さの非負の推定値を提供すると、Table Viewのロードのパフォーマンスを改善できます。テーブルに可変の高さの行が含まれている場合、テーブルのロード時にすべての高さを計算するのに費用がかかる場合があります。推定を使用すると、ジオメトリ計算のコストの一部を読み込み時間からスクロール時間まで延期できます。自己サイズのテーブルビューセルを作成する場合、このプロパティを設定し、制約を使用してセルのサイズを定義する必要があります。デフォルト値は0です。これは、推定がないことを意味します。 (Appleドキュメント)>

ストーリーボードについてはこの画像をご覧ください

また、xCode 9にはバグがあり、自動高さ計算で遅延読み込みを適用しようとすると、予期せずスクロールするため、この点でプログラムを使用することをお勧めします。

self.postTableView.estimatedRowHeight = 200;
self.postTableView.rowHeight = UITableViewAutomaticDimension;

このようなもの。ありがとう!

1
Najam
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tblview: UITableView!

    var selectindex = -1

    var arrnumber  = ["1","2","3","4","5"]

    var image = ["index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg"]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return arrnumber.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as! ExpandableTableViewCell


        cell.lblnumber.text = arrnumber[indexPath.row]

        cell.img.image = UIImage(named: image[indexPath.row] as! String)

        return cell


    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        if (selectindex == indexPath.row)
        {
            return 250
        }
        else{
            return 60
        }

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if(selectindex == indexPath.row)
        {
            selectindex = -1
        }else{
            selectindex = indexPath.row
        }

        self.tblview.beginUpdates()
        self.tblview.endUpdates()

    }

}
1
hiren

に加えて

tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension

tabeleViewCellのcontentViewに高さの制約を設定する必要があります。

class CustomTableViewCell: UITableViewCell {
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        let height: CGFloat = 200
        heightAnchor.constraint(equalToConstant: height).isActive = true
    }
}
1
Lindemann

私にとっては、セーフエリアがチェックされました。 「セーフエリア」のチェックを外すと、作業が完了しました。

"Safe Area"

1
sRoy