1

3つの異なるセクションを含むテーブルビューがあり、セクションの1つをクリックすると、セクションからセルのグループがドロップダウンします。今、テーブルビューを各セクションの最後のセルにスクロールしようとしています。私はこれまでにこれを思いつきました:

[atableView beginUpdates];

    [atableView insertRowsAtIndexPaths:indexPathToInsert withRowAnimation:insertAnimation];
    [atableView setContentOffset:CGPointMake(0, self.view.bounds.size.height)];
    [atableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:deleteAnimation];

    [atableView endUpdates];

   self.openSectionIndex = section;

したがって、この方法を使用すると、必要に応じてビュー全体が上に移動しますが、上部のセルの一部が切り取られ、ドロップダウンしたセクションの下に隠されます。このメソッドの呼び出しが早すぎる可能性があります。行のアニメーション化が完了する前に呼び出しているか、セクションの下で跳ね返っています。テーブルビューをプルダウンすると、セルがセクションの下から出てきます。何か案は?

4

1 に答える 1

0

あなたが説明しているように折りたたみ可能なセクションコンポーネントを実装しましたが、解決策があるかもしれません。

私の実装はTLIndexPathToolsライブラリにあります。「Collapse」サンプル プロジェクトを実行してみてください。最初のセクションを展開します。次に、セクション セクションを展開します。セルがアニメーション化されている間、テーブルがスクロールして画面上のセクションをできるだけ多く表示することがわかります。

これを行う秘訣は、テーブル ビューはプロセスのしばらく後までコンテンツ サイズを再計算しないため、まだ存在しない位置までスクロールする必要があることを理解することです。contentSize私が使用した解決策は、スクロールしたい位置を含む値にテーブルビューを明示的に設定することです。私の実装は次のようになります。

/*
 Force table to scroll to the specified location even if it is beyond the current
 content area. Use this to scroll to a future location during animiated table updates
 with the assumption that the location will be valid after the updates.
 */
- (void)forceTableScrollBasedOnExpectedSize:(CGFloat)scrollLocation animated:(BOOL)animated
{
    CGSize expectedMinimumContentSize = self.tableView.contentSize;
    if (expectedMinimumContentSize.height < scrollLocation) {
        // Temporarily expand the content area to contain the scroll location.
        // The table will overwrite this during the update process.
        expectedMinimumContentSize.height = scrollLocation;
        self.tableView.contentSize = expectedMinimumContentSize;
    }
    [self.tableView scrollRectToVisible:CGRectMake(0, scrollLocation-1, 1, 1) animated:animated];
}

scrollLocation、表示したい一番下の位置です。これがどのように使用されているかについては、 で詳細を確認できますUITableViewController+ScrollOptimizer.m

これがあなたの問題に当てはまるかどうかは正確にはわかりません。そうでない場合は、質問で詳しく説明してください。

于 2013-10-30T17:05:11.377 に答える