カスタムUITableViewCellsの1つがtableViewによって描画されるたびに:cellForRowAtIndexPath:コンソールはNSLayoutConstraintの不一致の束を吐き出します。私はこれらのほとんどを理解しています:カスタムUITableViewCellでレイアウトに影響を与えていない、奇妙なNSLayoutConstraintエラーを修正する方法
Unable to simultaneously satisfy constraints. ...boring stuff..
"<NSLayoutConstraint:0x8b0eb60 V:|-(NSSpace(20))-[UILabel:0x8b0cb30] (Names: '|':UITableViewCellContentView:0x8bd7d40)>",
"<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>",
"<NSLayoutConstraint:0x8b0dba0 V:[UITextView:0x91dba00]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x8bd7d40)>",
"<NSLayoutConstraint:0x8b0d5a0 V:[UITextView:0x91dba00(1000)]>",
"<NSAutoresizingMaskLayoutConstraint:0x8b00330 h=--& v=--& V:[UITableViewCellContentView:0x8bd7d40(44)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>
または少なくとも私はそう思います。本当に困惑しているのは、私のUITableViewCellが動作しており、制約が壊れていないようです。私は、エラーに記載されているいくつかの制約、特に最後の制約は、システムによって追加された制約だと思います。 .xibsを使用せず、コードに制約を追加しただけの場合は可能ですか?エラーの最後の行は、特に私が各コードの高さを動的に生成しているので私にはっきりと出ていますが、そこにある44のセルの高さに気付きました。
たとえば、[super updateConstraints]
に電話をかけたときのように、これらの制約の一部がデフォルトで追加されていますか?これらのエラーを解決する方法や、どこから来たのかを知る方法はありますか?
私はUITextView + Auto LayoutソリューションよりもCore Textにディッピングが優れていることを理解しています。今のところ私はセルの高さをキャッシュすることに取り組んでいます。しかし、これらのレイアウトエラーは、スクロール中にラグを引き起こす可能性がありますか、それとも単に画面上に表示されるように自動レイアウトを使って各セルの高さを計算しているためですか?
誰かがダウンロードして自分自身のために奇妙なことを体験したいと思ったら、私はthe project in which these errors are occurring on Githubを投稿しました。
これらの制約は、UITableViewCellの高さがデフォルトの高さである44である場合にはすべて満たされません。 '20 + 8 + 20 + 1000 +あなたのラベルの本質的な内容の大きさの高さ 'より大きいデフォルトの高さを手動で指定することによって、これらのエラーを取り除くことができます。また、身長を手動で計算してから表示されない場合は、無視することもできます。 –
ちなみに、autolayoutはUITableViewCellで使用しないでください。これは、スクロールのパフォーマンスが低い(不安定になる)一般的な原因であるためです。 –
@AaronBrager私はそれを動作させましたが、セルのcontentView.frame.heightをinitWithStyle:およびprepareForReuse:の大きな定数に設定しました。ご協力いただきありがとうございます! –