UITableView加载(完成绘制单元格)

Mar*_*ark 6 iphone uitableview drawrect

如何检测表格视图何时完成绘制单元格?

问题

我在UITableViewCell的contentView中有两个标签.这些标签的大小是动态的.我能够通过子类化UITableViewCell来实现,在drawRect方法中,我根据内容调整两个标签的帧.现在我想对齐所有第二个标签.

我的步骤思考

  1. 确定表视图中的内容并自动加载.
  2. 运行表视图单元格并确定UITableViewCell中第二个标签的x位置,该位置最远.
  3. 存储此x位置,当绘制任何单元格时,使用此x位置放置第二个标签.

问题是,如果我使用以下代码:

for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
    UITableViewCustomCell *cell = (UITableViewCustomCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
    NSLog ([cell.labelTwo description]);        
}
Run Code Online (Sandbox Code Playgroud)

第二个标签尚未绘制,这意味着我无法确定框架的大小,因此无法找到正确的x位置来对齐所有第二个标签.

我已经尝试了对UITableViewController进行子类化,并且在这些事件中不幸地查看了诸如viewDidLoad和viewDidAppear之类的事件,还没有绘制单元格.

我想要的是 ...

我想要的是表格视图至少绘制一次单元格,以便我可以确定表格视图单元格中标签的大小.我想通过使用cellForRow循环遍历所有单元格来实现此目的,但是虽然它成功返回单元格但是内容未被绘制,这意味着框架保持宽度为零.

有没有人有办法解决吗?

提前致谢,

标记

Ahm*_*der 2

在绘制任何内容之前,尝试调用sizeWithFont:这些标签的内容来获取最大宽度。您应该能够在稍后使用它来cellForRowAtIndexPath:根据需要调整宽度。

我建议您重新考虑使用UITableViewCellStyleValue2单元格并尝试配置textLabel和detailTextLabel。我也遇到过类似的情况,我就是这样做的。