自定义UITableViewCell宽度在tableview reloadData上调整大小

时间:2012-05-04 13:56:14

标签: iphone objective-c ios uitableview

我有一个UITableView,我通过UIView动画块增加其宽度。

[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的原始宽度和较小宽度。有没有人知道如何防止这种情况发生,以便我的单元格保持表格视图的宽度?

2 个答案:

答案 0 :(得分:2)

我认为最好的想法是不要用UITableViewCell宽度做魔术。

更好的解决方案是向单元格添加子视图并更改该子视图的宽度。

答案 1 :(得分:0)

基本上你不能改变单元格本身的宽度,它总是等于表格的宽度。

您可以更改单元格contentView的框架,但这不是一个好习惯。

创建自己的视图,将其添加到单元格,然后在layoutSubviews中更改其宽度。