私のiPadアプリ(OS X 10.7.3、Xcode 4.3.2)でビットマップが自動的にスクロールダウンしていて、原因を特定できないテーブルビューがあります。状況は次のとおりです。リロードデータの後にUITableViewが自動的にスクロールします
UITableViewは画面全体を塗りつぶし、ほとんどのセルは固定高さのセルです。 1つの例外は、UITextViewを含むセルで、動的な高さです(つまり、テキストの量に合わせてセルの高さが調整されます)。
テーブルビューが一番上にあるときにテーブルの動的高さセルが途切れると、問題が発生します。ビューが最初にロードされると、UITextViewセルの一部だけが表示された状態で、テーブルが通常どおりに描画されます。しかし、私がUIPopoverControllerを表示すると、popoverが終了した後に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では誰にもアイデアはありますか?
私は前にこれについて何か聞いて曖昧な想いを持っています。 UITableViewsはUIScrollViewサブクラスなので、UITextViewsはすべて混乱を招きます。おそらく、スクロールを無効にするなど、再ロードする前にTextViewのいくつかのプロパティを変更しようとしているのでしょうか? – GregularExpressions
reloadDataがファントムスクロールを起こさないようにする前に、テキストビューのスクロールを無効にしてください。コメントとして回答を投稿すると、私はそれを受け入れます。ありがとう。 –