更改UITableViewCell框架但不起作用

UITableViewCell *cell = [tableViewController.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];

[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y - 34, cell.frame.size.width, cell.frame.size.height)];

我想改变表视图​​单元格的框架,代码在一些ViewController中工作,但有些它不起作用。 我想知道它有什么问题。

非常感谢。

您无法完全控制单元格框架,尤其是原点框架。 要求表视图委托表视图单元格,但其位置取决于表视图的内部逻辑,以便正确地将单元格放在表视图(这是一个滚动视图子类)中。 当刷新表格视图的显示部分时,重新排列单元格位置并更新帧原点。 因此,虽然您的代码没有错,但它与您无法完全控制的某些表内部规则冲突,因此结果可能无法预测。

如果您希望看到此更改的可见效果,您可以将帧更换器代码移动到代码的另一部分,例如

 tableView:didSelectRowAtIndexPath: 

在这种情况下,您可以触摸一个单元格,调用此代码并更改单元格框架,您将立即进行更改。 但是,只要您将单元格滚出iPhone屏幕,然后在屏幕中移回此单元格,您就会注意到它将重新出现在其原始位置。