環境:
- 非同期 json ダンプからデータを取り込むテーブルにデータを入力するアプリを構築します。
- セルはカスタム クラス (定義済み) のものです。セル内のメイン ラベルは非常に長くなる場合があります。
- プロトタイプセル内のストーリーボードに「配置」されますが、コードを介してカスタマイズされます(かなり標準的なもの)。
- ラベルは cellForRowAtIndexPath でサイズ変更され、行は heightForRowAtIndexPath を介してサイズ変更されます - 行は、Massimo の回答 hereのように cellForRowAtIndex への呼び出しを強制することによってサイズ変更されます
手元の質問によると、興味深い (悪い) ことがいくつかあることに気付きました。
最初の問題: テーブルが読み込まれると、行とラベルが動的に正しくサイズ変更されます! すごい!ただし、下にスクロールしてから上にスクロールすると、ラベルの高さが正しくありません (たとえば、最初の行は読み込み時に正しく表示されていました)。次に、下にスクロールしてから上にスクロールしてもう一度表示すると、切り捨てられます。具体的には、行サイズは問題ありませんが、ラベルの高さが変更され、2 行のみに切り捨てられます。これはセルをカスタマイズするために絵コンテとコーディングの両方を行ったからなのだろうか。誰もこれを前に見たことがありますか?
2番目の問題:下にスクロールすると、行のサイズが正しく(大きい)、ラベルが短い(切り捨てられている)。上記の「潜在的な答え」の逆であるかどうか疑問に思います。
- 「潜在的な答え」は、行がすべて計算され、「前もって」保存されるため、下にスクロールしたり上に戻ったりしても影響を受けないことです。ただし、セルが「見えなくなって」キューから取り出され、再表示 (下にスクロールしてから上に戻る) すると、ストーリーボードに依存します。(不適切に?)