1

ゲームでプレイ可能なラウンドを表す UITableView があります。最初の起動時には、2 つのセルのみが tableView に表示されます。ユーザーがレベルをクリアするにつれて、より多くの行が tableView に追加されます。tableView が表示されるたびに、reloadData をリロードします (これは、ユーザーがレベルをクリアするたびに発生します)。

tableView にスクロールが必要な十分なセルが含まれると、tableView はスクロールせず、ユーザーが残した場所に戻ります。スクロールしてセルが下にあることを明らかにしますが、ユーザーが指を離すと tableView が跳ね返るため、ユーザーはスクロールが必要なセルを操作できなくなります。別のレベルを完了して tableView に戻ると、ビューは適切にスクロールします。

スクロールの問題が存在する場合、ユーザーがスクロールを試みたときに下に表示されるセルがあるにもかかわらず、tableView はスクロールが必要な大きさであることを認識していないかのように、元の位置に戻ります。スクロール。

tableView のデリゲートに heightForRowAtIndexPath メソッドまたは heightForHeaderInSection メソッドを実装していないため、干渉することはありません。このサイトと Google で同様の問題を検索し、contentSize の設定などいくつか試しましたが、うまくいきませんでした。

このスクロールの欠如には何か理由がありますか? または、もっと重要なことに、それを修正する方法はありますか? ありがとう!

編集:フレームについて尋ねるコメントがいくつかあります。テーブルが含まれるビューのフレーム、tableView 自体のフレーム、テーブルが含まれるビューの viewDidAppear メソッドで tableView のコンテンツ サイズをログに記録しました。

スクロールが必要になる前にビューが表示されたときの結果を次に示します。スクロール動作は期待どおりです。ユーザーは表示領域を超えてスクロールでき、元に戻ります。

view.frame: {{0, 20}, {320, 460}}
tableView.frame: {{0, 145}, {320, 315}}
tableView.contentSize: {320, 308}

スクロールが必要なときにビューが表示されたときの結果を次に示します。スクロールすると下のセルが表示されますが、ユーザーが指を離すと、表示されるべきではないときに元に戻ります。

view.frame: {{0, 20}, {320, 460}}
tableView.frame: {{0, 145}, {320, 315}}
tableView.contentSize: {320, 352}

新しいセルが追加された後、 contentSize.height が 44 変化したことに注意してください。contentSize.height は tableView.frame.height よりも大きくなりましたが、スクロール動作にはこれが反映されません。

4

2 に答える 2

0

プロトコル UITableViewDelegate は UIScrollViewDelegate に準拠しているため、メソッド -scrollViewWillBeginDragging および -scrollViewDidScroll を UITableViewDelegate 実装に直接実装するだけで済みます。実装クラスが UITableView へのデリゲートとして設定されている場合、それらは自動的に呼び出されます。

したがって、これらのメソッドでは、tableView のコンテンツの表示に関連するロジックを実装できます。スクロール中に新しいセルを表示する必要があると言ったとします。つまり、その時点で一番上のセルを非表示にする必要があります。上記の方法でロジックを次のように記述できます。

//set your content of tableview to show new cell each time.

またはスクロール方向の場合、メソッドがあります - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView,

// you can set here start and end coordinates and change them accordingly when scroll decelerates.

このような方法でコードを記述しても、スクロールが跳ね返ることはありません。そして、完璧な結果が得られます。お役に立てれば。

于 2013-08-04T07:43:12.797 に答える
-1
 self.tableview.scrollEnable=YES;//Paste this line where initialized UITableView.
于 2013-08-03T03:59:08.213 に答える