カスタムUITableViewCellでは自動レイアウトは無視されます


92

セルが高さを計算するために必要な垂直要素を含むすべての要素に制約を設定したにもかかわらず、自動レイアウトは無視されているようです。すべてのセルが圧縮されています。

これは、ストーリーボードの結果と制約のスクリーンショットです。 ここに画像の説明を入力してください

ここに画像の説明を入力してください

tableViewを保持するVCで、viewDidLoadのコードは次のとおりです。

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

2行目をコメントアウトすると、高さが120.0のセルが表示されますが、自動レイアウトも無視されます。

ありがとう


更新

インターフェイスを簡素化するために、制約として1つのラベルを残しました。

  • スーパービューへのリーディングスペース
  • 監視するトップスペース
  • 固定幅と高さ(100&100)
  • セルの高さを決定するためのすべての垂直方向の制約があることを確認するための、下部スペースからコンテナマージンまで

そして、この単純化されたインターフェースでは、自動レイアウトはまだ考慮されていません。これは、問題が不適切に設定された制約に起因するものではないことを示唆しています。

サイズインスペクターでは、行の高さが120に設定され、[カスタム]がオンになっています。セルには適切なカスタムクラスがあり、セル再利用識別子は正しいです。


更新:解決策が見つかりました

これは単純な間違いでした。以下の私の答えを参照してください。


デバッグターミナルを確認してください-何かが期待どおりに機能していないことを示唆するNSLayoutConstraintログがそこにありますか?
Matthew Hallatt 2017

デバッグ端末@MatthewHallattには何も表示されません。ありがとうございます。
kqtr 2017

@Kqtrは、これら2行にコメントを付けてから、通常どおり1回実行して、変更があるかどうかを確認します。
Tushar Sharma 2017

@TusharSharma 2行をコメントアウトすると、rowHeight行のみをコメントアウトするのと同じ効果があります。セルの高さは120.0ですが、自動レイアウトは機能しません。
kqtr 2017

1
Interface Builderは、制約が欠落しているかあいまいであると示していますか?小さな黄色または赤の感嘆符を確認します。
マシューハラット2017

回答:


248

プロトタイプセルとセルのUIViewの両方にIBでカスタムセルクラスが指定されていたため、自動レイアウトは無視されました。

UIViewをUIViewクラスに戻すと、問題が解決しました。

明確にするために


2
私は何時間もこの問題に悩まされていました、そしてこれはそれを解決します、ありがとう!
candidev

私はここに来るまでほぼ一日を無駄にしました....何千ものあなたに感謝します。
復活

-3

問題はあなたが実装していることだと思います:

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

 return x
}

テーブルビューでセルの自動高さを計算するには、この関数を削除する必要があります。


おかげで、残念ながらそれをオーバーライドしません。実際には、このtableViewのデリゲートすらなく、データソースのみがあります。
kqtr 2017

テキストビューの制約をセルのすべてのエッジに設定しましたか?そして、textViewのスクロールを無効にしましたか?
Jaafar Barek 2017

複数行のラベル(0行)には、1)左側に数字が表示された垂直方向の間隔、2)スーパービューまでの上部のスペース、3)スーパービューまでの末尾のスペース、4)質問ラベルの付いた下部のスペースに制約があります。
kqtr 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.