2012-04-06 9 views
6

私の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では誰にもアイデアはありますか?

+1

私は前にこれについて何か聞いて曖昧な想いを持っています。 UITableViewsはUIScrollViewサブクラスなので、UITextViewsはすべて混乱を招きます。おそらく、スクロールを無効にするなど、再ロードする前にTextViewのいくつかのプロパティを変更しようとしているのでしょうか? – GregularExpressions

+0

reloadDataがファントムスクロールを起こさないようにする前に、テキストビューのスクロールを無効にしてください。コメントとして回答を投稿すると、私はそれを受け入れます。ありがとう。 –

答えて

1

私はこのことについて以前は耳にしたことがあいまいです。 UITableViewsUIScrollViewのサブクラスなので、UITextViewsなので、すべて混乱する可能性があります。

恐らく、スクロールを無効にするなど、読み込み前にTextViewのいくつかのプロパティを変更しようとしているのでしょうか?

[myTextView setScrollEnabled:NO]; 
1

ときUITextView becomesFirstResponder(iOSの3のように私は信じている)、それはUIScrollViewの/のUITableViewController内にある場合は、それscrollviewはUITextViewが表示されていることを確認するためのiOSによって自動的にスクロールされます。この問題を回避するために

は、見ている:私はDisable UIScrollView scrolling when UITextField becomes first responder

0

UIScrollViewサブクラスをサブクラス化(私の場合UITextFieldをサブクラス化)し、私は「任意」のコンテンツのオフセットを受け入れていないことを確認してください:

override var contentOffset: CGPoint { 
    set { 
     let maxContentOffsetY = max(self.contentSize.height - self.frame.size.height, 0.0) 
     super.contentOffset.y = min(newValue.y, maxContentOffsetY) 
    } 
    get { 
     return super.contentOffset 
    } 
} 
関連する問題