2016-04-04 14 views
5

私はAutolayoutで複雑なUITableViewCellを作成しようとしていましたが、スクロール中に大きなパフォーマンスの遅れを与えています。iOS UITableViewCellは、drawRectとlayoutSubviewsのプログラムで作成します

セルレイアウトの複雑さは、すべてのセルが動的なテキストや画像とは異なるFacebookカードと似ています。

セルをlayoutSubviewsにレンダリングしようとしましたが、スクロールはまだ劣っていますが、Autolayoutよりも優れています。

また、セルをdrawRectにレンダリングしようとしましたが、これは最高のパフォーマンスを提供しますが、スクロールしている間はフレームが1回しか呼び出されないため、フレームを更新できません。

誰かが最高のスクロールパフォーマンスを得る最良のケースを教えてもらえますか?ハマった 。

+0

fbカード?あなたは明確にできませんでしたか? – faviomob

+0

は、画像の高さが変化し、投稿が – Mukesh

+0

のfbニュースフィードを意味します。コメント、好きなカウンターなどがあります。私は、許容範囲内でautolayoutを使ってinstagramセルを再現しました。具体的なサンプルでは、​​あなたのソリューションに何が間違っているかを示すことは難しいです。私はfbとinstagramがautolayoutを使用しないと信じています:) – faviomob

答えて

0

また、特定の複雑さのセルを処理する場合、ストーリーボードを使用すると制約が緩すぎるという同じ結論に至りました。私は10種類以上の細胞を持っていました。このシナリオでは、フレームを使用する必要がありました。

あなたの子ビューのフレームを使用してセルをレイアウトする以外の方法はありません。 heightForRowAtIndexPathメソッドとcellForRowAtIndexPathメソッドを使用すると、セルのスタイルを完全に変更できます。

最初に呼び出されるメソッドは、cellForRowAtIndexPathです。この方法では、ビューをレイアウトするセルのスタイルを完全に整えます。一度すべてを行ったら、セルの高さも決定できます。親ビューのフレームからセルの高さを取り出して使用することができます。

heightForRowAtIndexPathでは、配列に高さを保存した場合、セルの高さを返します。

既存のコードをリファクタリングしなければならなかったので、私はlayoutsubviewsメソッドを無視しました。私はしかし、cellForRowAtIndexPath内でのみレイアウトし、layoutsubviewsメソッドではなく、セルをレイアウトしました。この方法では、子ビューの高さを使用して親の高さを計算することができます。レイアウトのサブビューでは、ビューが後でレイアウトされ、問題が発生する可能性があります。

とにかくこの情報が誰かに役立つことを願っています。

関連する問題