web-dev-qa-db-ja.com

UITableViewの自動サイズ変更行の制約がiPhone6Plusで不思議に壊れています

サムネイルと一連のテキストを持つカスタム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として計算されたことを示しているようです。 。私はしばらく頭を叩いていますが、なぜこれが起こっているのか理解できません。誰か助けてもらえますか?

更新:これは私のテーブルビューセルがどのように見えるかです。

cell

[〜#〜] update [〜#〜]大きなプロジェクトの一部であるため、メインリポジトリからコードを取得できませんでした。しかし、私は非常に単純な正気のプロジェクトで問題を再現することができました。ここで見つけてください github上

25
drcocoa

この警告は、制約に矛盾があることを示しています。高さ制約の優先度を999に下げると、それはなくなります。 Githubプロジェクトでテストし、完全に機能しました。

enter image description here

32
Yariv Nissim

3倍スケールディスプレイ(iPhone 6+)の0.333は、おそらくセルセパレーターに接続されています。

制約はセルのサイズを設定するのではなく、contentViewのサイズを設定することに注意してください。ただし、セルは、セルセパレータのセルの高さに2ピクセル(= 0.666ポイント)を追加する必要があります。自動レイアウトは、ビューの位置を整数境界に維持しようとするため、セルの高さに0.666ポイントを追加すると、コンテンツの高さに0.333が追加される可能性があります。

テーブル区切り文字をNoneに設定すると、エラーを回避できます。優先度の1つを999(通常は最下位の優先度)に設定することは、他の answer が示唆しているように、一般的には良い解決策です。

7
Sulthan

警告は問題が何であるかを正確に伝えていますが、気付かない場合があります。最初の3つの制約は、コンテナの上部から20ピクセル下、コンテナの下部から20ピクセル上にある高さ90ピクセルの画像の場合ですmargin。これは130であり、合計の高さを138にする4番目の制約とは互換性がありません。ただし、下部のEdge制約はコンテナのmarginを基準にしているため、特定のピクセル数が追加されます。全高の制約を削除するか(私の推奨)、上部と下部のエッジの量を変更します。

0
NRitH