1

環境:

  • 非同期 json ダンプからデータを取り込むテーブルにデータを入力するアプリを構築します。
  • セルはカスタム クラス (定義済み) のものです。セル内のメイン ラベルは非常に長くなる場合があります。
  • プロトタイプセル内のストーリーボードに「配置」されますが、コードを介してカスタマイズされます(かなり標準的なもの)。
  • ラベルは cellForRowAtIndexPath でサイズ変更され、行は heightForRowAtIndexPath を介してサイズ変更されます - 行は、Massimo の回答 hereのように cellForRowAtIndex への呼び出しを強制することによってサイズ変更されます

手元の質問によると、興味深い (悪い) ことがいくつかあることに気付きました。

最初の問題: テーブルが読み込まれると、行とラベルが動的に正しくサイズ変更されます! すごい!ただし、下にスクロールしてから上にスクロールすると、ラベルの高さが正しくありません (たとえば、最初の行は読み込み時に正しく表示されていました)。次に、下にスクロールしてから上にスクロールしてもう一度表示すると、切り捨てられます。具体的には、行サイズは問題ありませんが、ラベルの高さが変更され、2 行のみに切り捨てられます。これはセルをカスタマイズするために絵コンテとコーディングの両方を行ったからなのだろうか。誰もこれを前に見たことがありますか?

2番目の問題:下にスクロールすると、行のサイズが正しく(大きい)、ラベルが短い(切り捨てられている)。上記の「潜在的な答え」の逆であるかどうか疑問に思います。

  • 「潜在的な答え」は、行がすべて計算され、「前もって」保存されるため、下にスクロールしたり上に戻ったりしても影響を受けないことです。ただし、セルが「見えなくなって」キューから取り出され、再表示 (下にスクロールしてから上に戻る) すると、ストーリーボードに依存します。(不適切に?)
4

2 に答える 2

0

3 つの問題はすべて、heightForRowAtIndexPath で間違った高さを返すことを示しています。私のデータ モデル クラスには、heightForRowAtIndexPath で呼び出す calculateHeight メソッドがあります。モデルは回答もキャッシュするため、最初の呼び出し後に再計算する必要はありません。cell クラスは、モデルの計算された高さを使用して、そのサブビューをレイアウトします。

于 2012-12-04T22:57:41.750 に答える
0

ストーリーボードからプロトタイプ セルを削除し、完全にコード化することで「回答」したところ、問題は解消されました。基本的な仕組みはまだ理解されていません (つまり、セルがキューに入れられてから再び表示されるときのストーリーボードとコードの間の相互作用)

于 2012-12-07T19:41:51.377 に答える