0

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

4

2 回答 2

2

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

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

于 2012-05-04T14:15:25.217 回答
0

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

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

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

于 2013-09-05T08:59:15.447 回答