自定义 UITableViewCell 宽度在 tableview reloadData 上调整大小
Posted
技术标签:
【中文标题】自定义 UITableViewCell 宽度在 tableview reloadData 上调整大小【英文标题】:Custom UITableViewCell width is resized on tableview reloadData 【发布时间】:2012-05-04 13:56:14 【问题描述】:我有一个 UITableView,我正在通过 UIView 动画块增加它的宽度。
[UIView animateWithDuration:.5
animations:^
CGRect frame = myTableView.frame;
frame.size.height += 190;
myTableViewView.frame = frame;
[[myTableViewView visibleCells] makeObjectsPerformSelector:@selector(setNeedsDisplay)];
completion:nil];
此调用完成后,我的子类 UITableViewCell 将被重绘并调用此委托方法。
- (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 的原始和更小的宽度。有谁知道如何防止这种情况发生,以便我的单元格保持表格视图的宽度?
【问题讨论】:
你好,在 UIView 动画块中你只是增加高度而不是宽度,如果你想增加两者都在这里申请。 【参考方案1】:我认为最好的办法是不要用UITableViewCell
宽度做魔术。
更好的解决方案是将子视图添加到单元格并更改该子视图的宽度。
【讨论】:
【参考方案2】:基本上你不能改变单元格本身的宽度,它最终总是等于表格的宽度。
您可以更改单元格的contentView
的框架,但这不是一个好习惯。
创建您自己的视图,将其添加到单元格中,并在 layoutSubviews
中更改其宽度。
【讨论】:
以上是关于自定义 UITableViewCell 宽度在 tableview reloadData 上调整大小的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 中的 contentView 宽度错误?
自定义 UITableViewCell 宽度在 tableview reloadData 上调整大小
为啥我的自定义 UITableViewCell 宽度在初始加载时不正确?
确定分组自定义单元格的 UITableViewCell 宽度的正确方法?