Изменить кадр UITableViewCell, но не сработало - PullRequest
3 голосов
/ 25 марта 2012

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, но в некоторых он не работает.Я хочу знать, что с этим что-то не так.

большое спасибо.

1 Ответ

2 голосов
/ 25 марта 2012

Вы не можете иметь полный контроль над фреймом ячейки, особенно над источником.Делегат табличного представления запрашивается для ячейки табличного представления, но затем его положение зависит от внутренней логики табличного представления, чтобы правильно разместить ячейку внутри табличного представления (который является подклассом представления прокрутки).Когда отображаемая часть табличного представления обновляется, положение ячейки переупорядочивается, а происхождение кадра обновляется.Таким образом, хотя ваш код не является неправильным, он конфликтует с некоторыми внутренними правилами таблиц, которые вы не можете полностью контролировать, и поэтому результаты могут быть непредсказуемыми.

Если вы хотите вместо этого увидеть видимый эффект этого изменения, вы можете переместить свой фреймКод смены на другую часть кода, например, внутри

tableView:didSelectRowAtIndexPath:
. В таком случае вы можете, например, коснуться ячейки, вызвать этот код и изменить кадр ячейки, и вы сразу же внесете изменение.Но как только вы прокрутите ячейку на экране iPhone, а затем вернетесь к этой ячейке на экране, вы заметите, что она снова появится в исходном положении.
...