2009-08-27 7 views
2

との区分のUITableViewレンダリンググリッチ次のメソッドを使用してUITableViewセクションの上部に表示されます(下のコードを参照)。このグリッチとは別に、すべてが美しく動作します。セクションの上部に挿入された行は、左上と右上に丸みのあるコーナーがレンダリングされます。問題は、下の行は視覚的に更新されていないということです。つまり、2番目の行/セルには角が丸められていますが、2番目のセクションの上に新しい行を挿入するアニメーションの後には、上隅に2乗する必要があります。please see this screen grab for clarification発生した。更新されていないセルのコーナーを参照してください。iPhone:私は私がいるこののUITableViewの問題の解決策を探してくださいする場所へと立ち往生ビットだとしてあなたが役立つことを願っinsertRowsAtIndexPaths

// Amend the data source before updating the view to reflect the changes 
[[self.playerData objectAtIndex: 0] removeObjectAtIndex: row]; 
[[self.playerData objectAtIndex: 1] insertObject:playerName atIndex:0]; 

// Amend the view to reflect changes 
NSArray *deleteIndexPaths = [NSArray arrayWithObjects: 
    [NSIndexPath indexPathForRow:row inSection:0], 
    nil]; 

NSArray *insertIndexPaths = [NSArray arrayWithObjects: 
    [NSIndexPath indexPathForRow:0 inSection:1], 
    nil]; 

[self.playerTableView beginUpdates]; 
[self.playerTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation: UITableViewRowAnimationLeft]; 
[self.playerTableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation: UITableViewRowAnimationLeft]; 
[self.playerTableView endUpdates]; 

もちろん、メッセージを送信したばかりの場合:[self.playerTableView reloadData];ビューが正しく表示されます。しかし、我々は本当に滑らかな経験を提供するためにアニメーション化するために、この手順が本当に必要です。たぶん、挿入アニメーションの完了時に発生した委任イベントがあった場合、グリッドを取り除くためにデータソースからビューを更新できますが、このようなフックは見つかりませんでした。

ご協力いただければ幸いです。

答えて

2

回答が見つかりました。最も効率的ではないかもしれませんが、ここではいくつかのセルしか扱っていないので、状況によっては問題ありません。私は明示的に再描画されていなかった他のセルをリフレッシュすることによってそれを固定している:

// Fix for cells not rendered correctly after insertion of top cell] 
[self.playerTableView reloadRowsAtIndexPaths:reloadIndexPaths withRowAnimation: UITableViewRowAnimationNone]; 

私はおそらくちょうどのUITableViewのあまり期待していた:insertRowsAtIndexPathsが実行されている間、それは私のためにアウトコーナーを並べ替えるということを。

FYI情報このコードは、beginUpdates-endUpdatesブロックの直後に配置されています。それ以外のことは、それを調査していないのにクラッシュする原因と思われます。

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

0

表示可能な行を再読み込みしてから新しい行を挿入することをお勧めします。

self.tableView.beginUpdates() 
self.tableView.reloadRowsAtIndexPaths(self.tableView.indexPathsForVisibleRows!, withRowAnimation: UITableViewRowAnimation.Fade) 
self.tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Fade) 
self.tableView.endUpdates() 
関連する問題