无法在 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:
中进行此调用
问题
我正在尝试根据特定条件调整放置在 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:
中进行此调用