2012-05-04 5 views
0

私はUITableViewをUIViewアニメーションブロックを通して幅を増やしています。この呼び出しが完了するとカスタムUITableViewCellの幅は、tableview reloadDataにサイズ変更されました

[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]を呼び出すときです。

-[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] 

この呼び出しは次のとおりです。別のコールがプライベートのUITableView呼び出しからの私のすべてのセルに呼び出されている:リロードデータは、上記の正しいフレームを設定するために呼び出すwillDisplayCellが、私はのUITableViewCell setFrameのスタックトレースを見たときに起動されますすべての私の目に見えるUITableViewCellsのフレームを元のUITableViewのより小さい幅に設定します。誰もが、どのように私の細胞がテーブルビューの幅を維持するために起こってからこれを保つために任意のアイデアを持っていますか?

+0

こんにちは UIViewアニメーションブロックでは、ここで両方を適用したい場合は、高さを高くしないでください。 –

答えて

2

私は、UITableViewCellの幅で魔法をするのではないと思います。

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

0

基本的には、セル自体の幅を変更することはできません。セルの幅は、最終的に表の幅と常に同じです。

セルのフレームcontentViewを変更することはできますが、これはお勧めできません。

独自のビューを作成してセルに追加し、幅をlayoutSubviewsに変更します。

関連する問題