无法在 cellForRowAtIndexPath 中获取单元格框架或约束

Unable to get cell frame or constraints in cellForRowAtIndexPath

问题

我正在尝试根据特定条件调整放置在 UITableViewCell 中的 UIButton 的一些约束。

我在数据源方法中这样做 cellForRowAtIndexPath。但是,我的单元格的框架似乎总是返回 (0, 0, 0, 0),这意味着我无法获得任何子视图的约束来调整它们,除非我滚动。

我试过的

我已经 created and uploaded a simple project 试图解决这个问题。这是来自 cellForRowAtIndexPath:

的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    TestCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    cell.label.text = [NSString stringWithFormat:@"%lu", indexPath.row];

    NSLog(@"CELL FRAME: %f, INDEXPATH: %lu, CONSTRAINTS: %lu", CGRectGetWidth(cell.frame), indexPath.row, cell.label.constraints.count);

    return cell;
}

结果

当我运行项目时,我看到以下日志:

CELL FRAME WIDTH: 0.000000, INDEXPATH: 0, CONSTRAINTS: 0

但是,一旦我滚动,我开始看到类似这样的内容:

CELL FRAME WIDTH: 320.000000, INDEXPATH: 7, CONSTRAINTS: 2

问题

我在这里做错了什么?我怎样才能获得我的单元格子视图的约束来调整它们,而不必先滚动?

提前致谢。

tableView:willDisplayCell:forRowAtIndexPath:方法中调整单元格。

cellForRowAtIndexPath: 方法中,单元格的框架尚未设置且单元格尚未添加到 table 视图。太早了。

更好的做法是将责任放在 TestCell class.

的实施中

你观察得太早了。此时预计单元格不会有合适的帧。在调用 cellForRowAtIndexPath' 之后,tableview 仍然在后台工作以调整单元格的大小,这将导致框架发生变化。

尝试在 tableView:willDisplayCell:forRowAtIndexPath: 中进行此调用