UIViewアニメーションブロックを介して幅を広げているUITableViewがあります。
[UIView animateWithDuration:.5
animations:^{
CGRect frame = myTableView.frame;
frame.size.height += 190;
myTableViewView.frame = frame;
[[myTableViewView visibleCells] makeObjectsPerformSelector:@selector(setNeedsDisplay)];
}
completion:nil];
この呼び出しが完了すると、サブクラス化された UITableViewCells が再描画され、このデリゲート メソッドが呼び出されます。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
CGRect frame = cell.frame;
frame.size.width = tableView.frame.size.height;
cell.frame = frame;
}
これがないと、私の UITableViewCells は UITableView の全幅に描画されません。私が抱えている問題は、[tableView reloadData] を呼び出すときです。データのリロードは、正しいフレームを設定するために上記の willDisplayCell 呼び出しを呼び出していますが、UITableViewCell setFrame のスタック トレースを見ると、プライベート UITableView 呼び出しからすべてのセルで別の呼び出しが呼び出されています。
-[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:]
この呼び出しは、表示されているすべての UITableViewCells のフレームを UITableView の元の小さい幅に設定しています。私のセルがテーブルビューの幅のままになるように、これが起こらないようにする方法を知っている人はいますか?