0

私のアプリにはTableViewControllerがあります(いくつかありますが、これはこの特定の1つでのみ発生します)。

コンテンツはNSFetchedResultsControllerを使用してコアデータから駆動され、TVCはNSFetchedResultsControllerDelegateであり、コンテンツの変更に基づいてテーブルを更新するためのメソッドを使用します(つまり、beginUpdates、endUpdatesなどを実行します)。

私はこれを何度も行ったことがあるので、同じコードを使用します。(Ray Wenderlichのサイトにもあります)。

とにかく、CoreData DBに新しいアイテムを追加するビュー(TVCからプッシュされたもの)があります。次に、この新しいアイテムをTVCのテーブルに追加する必要があります。

これはすべて正常に機能しています。テーブルを上下にスクロールして見ます。[追加]をクリックします。新しいアイテムを追加します。TableViewに戻ると、新しいアイテムが表示されます...

しかし

tableViewでは、現在、一番下までスクロールできません。一番下までスクロールして画面を押し続けると、テーブル内の新しいデータを確認できますが、離すとtableViewが跳ね返り、表示されなくなります。

私はいくつかのことをチェックしました...

  1. TableViewのフレームは、前後で変更されません。
  2. tableViewのcontentSizeは、追加されたセルに対応するように変更されます。
  3. スクロールするとき、最小contentOffsetは前後の両方で0です(これは正しいです)。
  4. MAXIMUM contentOffsetをスクロールすると、前後で同じになります(これは正しくありません)。

rootVCに戻ってから、TVCにプッシュバックすると、もう一度最後までスクロールして、すべての新しいセルを表示できます。

私はいくつかのテストを行いました。

を使用して自動回転を再度有効にし- (BOOL)shouldAutorotateてから、新しいセルを追加するなどの動作を実行しても、一番下までスクロールできません。しかし、横向きに回転してから縦向きに戻すと、一番下までスクロールできるようになります。

この[self viewWillLayoutSubViews];後、メソッドを実行してみました[self.tableView endUpdates];が、それでも何も起こりませんでした。

私が言ったように、私はこれまで何度も問題なくこれを行ってきました。私は今何が起こっているのか本当に理解していません。

4

1 に答える 1

0

私はついにうまくいく解決策を見つけました!

結局、私は[self.tableView reloadData];そのviewDidAppear方法に入れなければなりませんでした。

それで問題は解決しました。

于 2012-11-02T14:20:55.443 に答える