2016-05-07 2 views
0

行が表示されている間に行追加の行がアニメーションで挿入されるtableViewを実装しようとしました。私は、データソースの配列を更新して呼び出す:InsertRowアニメーションスクロールUITableViewを

[self.tableView insertRowsAtIndexPaths:addedIndexPaths withRowAnimation:(UITableViewRowAnimationMiddle)]; 

私はテーブルビューが(目に見える超えている)すべてと、画面上に挿入される行にスクロールしないようにしたいです。 一部のセクション、特にテーブルビューの最後のセクションでは、セルが挿入され、テーブルビューは完全に異なるセクションにスクロールします。

layoutIfNeededをbeginUpdate/endUpdateブロック内で呼び出し、beginUpdate/endUpdateブロック内で正しいコンテンツオフセットを設定するか、セクション全体をリロードします。

何も機能しません。 scrollviewは常にスクロールアップします。

セルのサイズは、autolayout-constraintsを使用して設定します。テーブルビューの上半分に、期待通りにセルが挿入されます。

セルにアニメーションが挿入されているときにコンテンツのオフセットを修正するにはどうすればよいですか? どうすればそのアニメーションをデバッグできますか?

+0

他のUITableViewRowAnimationオプションを試しましたか?関連するコードを含めてください。 – KrishnaCA

+0

はい他のすべての行アニメーションを試しました。違いはありませんでした。私が知っていることは、(データモデルが更新されていれば)アニメーション挿入のキックに必要なすべてのコードです。そして、ほとんどの場合、正常に動作しますが、常にそうではありません。 – paul

答えて

0

これはUITableViewsの既知のバグです。かなり長い時間がかかっており、修正されていません(見た目では決してありません)。

あなたのセルが動的なサイズで、デフォルトの 'UITableViewAutomaticDimension'を使用している(私は仮定しています)ため、このルートがあります。これを修正するには、 'UITableViewAutomaticDimension'の使用を中止し、各セルのサイズを計算する必要があります。これはテーブルビューのぎざぎざに役立つはずですが、おそらく完璧ではありません。

もう1つの方法は、CATransactionを使用して、挿入後にテーブルビューの位置をロックして保持することです。

それは、この(おそらく、私はそれをテストしていない)のようなものになります。私は同じ問題に直面し、私はその後、UITableViewAutomaticDimensionとしてセクションヘッダの高さを削除する場合は追加することをたくさん見つけソリューションを試した後

CGFloat offset = self.tableView.contentSize.height - self.tableView.contentOffset.y; 

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 

[CATransaction setCompletionBlock: ^{ 
    // Code to be executed upon completion 
}]; 

[self.tableView beginUpdates]; 
[self.tableView insertRowsAtIndexPaths: indexPaths 
       withRowAnimation: UITableViewRowAnimationAutomatic]; 

self.tableView.contentOffset = CGPointMake(0, 
             self.tableView.contentSize.height - bottomOffset); 
[self.tableView endUpdates]; 
[CATransaction commit]; 
+0

bottomOfsetはどのように計算されますか? – paul

+0

アニメーションブロックでcontentOffsetを設定したときにオフセットを意味しましたか?私はコードをテストし、それは動作しませんでした:tableviewはまだジャンプし、変更はアニメーション化されていません。また、アニメーションの後にスクロールすると、テーブルビューが点滅します(リロードすると思います)。この作品をどうやって作るか考えていますか? – paul

+0

私はそれがそのまま働いていないと確信していました。おそらく、滑らかにするための最良のコンボを見つけるためには、いくつかの修正が必要です。しかし、これは怠け者です。 UITableViewAutomaticDimensionを使用する代わりにセルの高さを計算しただけです。 – MikePT28

0

をUITableViewから行を削除すると完全に動作し、テーブルビューも同じ位置に固定されます。

tableView.sectionHeaderHeight = 10; 
tableView.estimatedSectionHeaderHeight = UITableViewAutomaticDimension; 

追加された場合は2行を上に削除します。

tableView.estimatedRowHeight = 15; 
tableView.rowHeight = UITableViewAutomaticDimension;* 

「自動寸法」の行は問題を作成しません。

ただし、自動寸法のセクションヘッダービューで問題が発生します。

ありがとうございました。

関連する問題