0

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 の元の小さい幅に設定しています。私のセルがテーブルビューの幅のままになるように、これが起こらないようにする方法を知っている人はいますか?

4

2 に答える 2

2

UITableViewCell幅で魔法をかけないことが最善の考えだと思います。

より良い解決策は、サブビューをセルに追加し、そのサブビューの幅を変更することです。

于 2012-05-04T14:15:25.217 に答える