iPad アプリ (OS X 10.7.3、Xcode 4.3.2) で自動的に少し下にスクロールするテーブル ビューがあり、原因を探す場所がわかりません。状況は次のとおりです。
UITableView は画面全体に表示され、ほとんどのセルは高さが固定されたセルです。1 つの例外は、UITextView を含むセルで、高さが動的です (つまり、セルの高さがテキストの量に合わせて調整されます)。
テーブル ビューが一番上にあるときにテーブルの動的な高さのセルが切り取られている場合、問題が発生します。ビューが最初にロードされると、テーブルは通常どおり描画され、UITextView セルの一部だけが表示されます。ただし、UIPopoverController を表示する場合は、ポップオーバーを閉じた後に reloadData を実行する必要があります。そうすると、テーブル ビューが下にスクロールしてすべての UITextView が表示されます。(UITextView を含むセルではなく、UITextView だけで構いません。テーブルはグループ化されたテーブルであり、UITextView セルはセクション内の唯一のセルであるため、このファントム スクロールの後、丸みを帯びた下端はまだ表示されません。)
テーブル ビューをスクロールしたり、コンテンツ オフセットを設定したりするコードがアプリに表示されないため、何が原因なのか完全に混乱しています。
絞り込むために、UIScrollViewDelegate を尊重するようにビューを設定しました。scrollViewDidScroll: メソッドにブレークポイントを設定すると、ポップオーバーが消えた後にプログラムは実際に停止し、次のバックトレースが表示されます。
(lldb) bt
* thread #1: tid = 0x1f03, 0x0005245f MyApp`-[ContactDisplayViewController scrollViewDidScroll:] + 31 at ContactDisplayViewController.m:1143, stop reason = breakpoint 3.1
frame #0: 0x0005245f MyApp`-[ContactDisplayViewController scrollViewDidScroll:] + 31 at ContactDisplayViewController.m:1143
frame #1: 0x017e3494 UIKit`-[UIScrollView setContentOffset:] + 521
frame #2: 0x0180804d UIKit`-[UITableView setContentOffset:] + 334
frame #3: 0x017d495e UIKit`-[UIScrollViewScrollAnimation setProgress:] + 523
frame #4: 0x0183d234 UIKit`-[UIAnimator(Static) _advance:] + 255
frame #5: 0x02c013a3 GraphicsServices`HeartbeatTimerCallback + 35
frame #6: 0x023278c3 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
frame #7: 0x02328e74 CoreFoundation`__CFRunLoopDoTimer + 1220
frame #8: 0x022852c9 CoreFoundation`__CFRunLoopRun + 1817
frame #9: 0x02284840 CoreFoundation`CFRunLoopRunSpecific + 208
frame #10: 0x02284761 CoreFoundation`CFRunLoopRunInMode + 97
frame #11: 0x02bfe1c4 GraphicsServices`GSEventRunModal + 217
frame #12: 0x02bfe289 GraphicsServices`GSEventRun + 115
frame #13: 0x017a4c93 UIKit`UIApplicationMain + 1160
frame #14: 0x0000263d MyApp`main + 125 at main.m:14
そして、そのメソッドで scrollView を出力すると、UITableView が動いていることがわかります (contentOffset がどこから来ているのかわかりません)。
Printing description of scrollView:
<UITableView: 0xc3ed400; frame = (0 99; 383 817); clipsToBounds = YES;
autoresize = W+RM+H; layer = <CALayer: 0x7bf1a40>; contentOffset: {0, 14}>
このファントム スクロールは、デバイスとシミュレーター、および iOS 4.3、5.0、および 5.1 で表示されます。誰にもアイデアはありますか?