サムネイルと一連のテキストを持つカスタムUITableViewCellがあります。行の高さは、を使用して自動的に計算されるように構成されています
tableView.estimatedRowHeight = 129;
tableView.rowHeight = UITableViewAutomaticDimension
行の高さは、正確に138ポイントとして計算する必要があります。 iPhone 5ではすべてが見栄えがします。ただし、iPhone 6 Plusでは、次のログを持つランダムな行に対して、自動行の高さが断続的に失敗します。
(
"<NSLayoutConstraint:0x17009ddd0 V:|-(20)-[scoop.ThumbnailImage:0x124d2a5a0] (Names: '|':UITableViewCellContentView:0x124e23200 )>",
"<NSLayoutConstraint:0x17009de70 UITableViewCellContentView:0x124e23200.bottomMargin == scoop.ThumbnailImage:0x124d2a5a0.bottom + 20>",
"<NSLayoutConstraint:0x17009e780 V:[scoop.ThumbnailImage:0x124d2a5a0(90)]>",
"<NSLayoutConstraint:0x17009ef00 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x124e23200(138.333)]>"
)
ログの最後の行は、何らかの理由で行の高さが138ではなく138.333として計算されたことを示しているようです。 。私はしばらく頭を叩いていますが、なぜこれが起こっているのか理解できません。誰か助けてもらえますか?
更新:これは私のテーブルビューセルがどのように見えるかです。
[〜#〜] update [〜#〜]大きなプロジェクトの一部であるため、メインリポジトリからコードを取得できませんでした。しかし、私は非常に単純な正気のプロジェクトで問題を再現することができました。ここで見つけてください github上 。
3倍スケールディスプレイ(iPhone 6+)の0.333は、おそらくセルセパレーターに接続されています。
制約はセルのサイズを設定するのではなく、contentView
のサイズを設定することに注意してください。ただし、セルは、セルセパレータのセルの高さに2ピクセル(= 0.666ポイント)を追加する必要があります。自動レイアウトは、ビューの位置を整数境界に維持しようとするため、セルの高さに0.666ポイントを追加すると、コンテンツの高さに0.333が追加される可能性があります。
テーブル区切り文字をNone
に設定すると、エラーを回避できます。優先度の1つを999(通常は最下位の優先度)に設定することは、他の answer が示唆しているように、一般的には良い解決策です。
警告は問題が何であるかを正確に伝えていますが、気付かない場合があります。最初の3つの制約は、コンテナの上部から20ピクセル下、コンテナの下部から20ピクセル上にある高さ90ピクセルの画像の場合ですmargin。これは130であり、合計の高さを138にする4番目の制約とは互換性がありません。ただし、下部のEdge制約はコンテナのmarginを基準にしているため、特定のピクセル数が追加されます。全高の制約を削除するか(私の推奨)、上部と下部のエッジの量を変更します。