序文: これはかなり抽象的な質問です。
セルの高さに応じて異なる画像を使用するセルがいくつかありUITableView
ます (50px から 1000px までの高さで 50px 単位で)。cellForRowAtIndexPath
アプリが最初にロードされたときに、最初の 3 つのセル (3 つすべてが画面上にあるかどうかに関係なく) の高さが 100px であると報告され、下にスクロールして再び上に戻ると、それらの高さが元に戻るという奇妙な問題が発生しています。正しい値に。画面上の高さの変更はなく、使用される画像のみが変更さcell.frame.size.height
れ、NSLog
ステートメントの値が変更されます。
私は と にログインしてheightForRowAtIndexPath
おりcellForRowAtIndexPath
、彼らが を離れたときに高さが正しいことを確認できますheightForRowAtIndexPath
。しかし、 を入力するcellForRowAtIndexPath
と、最初の 3 つの高さがすべて均一に 100 に設定されます。次に、これらの 3 つのセルが画面外になるまで下にスクロールし、次に上にスクロールすると、.height
値が正しい値に変更されます。
要約すると、私の質問は次のとおりです。
これらの最初のいくつかのセルの値を変更する可能性のあるコードの最後heightForRowAtIndexPath
と最初の間に呼び出されるコードはありますか?cellForRowAtIndexPath
cell.frame.size.height
この問題が最初の 3 つのセルでのみ発生するのはなぜですか? そして、しばらくしてリロードすると元に戻るのはなぜですか? 再利用識別子が原因である可能性があると思いましたが、最初にロードされたときにまだその識別子が割り当てられているので、それは問題ではありませんか?
編集: 100px の高さは、ストーリーボードのプロトタイプ セルの行の高さから来ていると思います。それを 101px に変更すると、最初の 3 つのセルは最初は 101px になります。
編集:画像を設定するために使用しているコードは次のとおりです。この部分は機能していますが、操作する値が間違っています:
UIImage *cappedBG;
float cellHeight = cell.contentView.frame.size.height;
if (cellHeight <= 51) {
cappedBG = [[UIImage imageNamed: @"bg50.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 101) {
cappedBG = [[UIImage imageNamed: @"bg100.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 151) {
cappedBG = [[UIImage imageNamed: @"bg150.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 201) {
cappedBG = [[UIImage imageNamed: @"bg200.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else {
cappedBG = [[UIImage imageNamed: @"bg250.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
}