Как я могу заставить свои ячейки перерисовываться после поворота устройства?
Когда я тестирую на iPhone, ориентация по умолчанию - портретная, поэтому мои динамические ячейки имеют такую высоту, какой они должны быть, когда устройство находится в портретной ориентации: это означает, что когда я поворачиваюсь в альбомную ориентацию, на экране появляется много пустого места. клетка. Когда я тестирую на iPad, все наоборот. При повороте в портретную ориентацию часть текста обрезается, поскольку по умолчанию используется альбомная ориентация. У меня есть отдельные раскадровки для обоих устройств, и для обоих контроллеров представления установлено значение «Ориентация: предполагаемая».
(Портрет)
(Пейзаж)
Вот что происходит на iPhone - растягивающаяся этикетка имеет темно-красный фон, поэтому вы можете видеть фактический размер этикетки. Однако высота ячейки не пересчитывается, и, поскольку нижние метки ограничены нижней частью ячейки, они полностью находятся внизу сами по себе. Если я добавлю ограничение из метки растягивания (той, что с фоном) в нижнюю часть ячейки, все, что он сделает, это растянет метку следующим образом:
(Ярлык растянут)
Это говорит мне о том, что прямо сейчас я просто не могу заставить ячейку знать, что такое ориентация, и перерисовать, как только она изменится, чтобы соответствовать. Вот мой heightForRowAtIndexPath
код, который вычисляет высоту ячейки:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.opCell)
{
self.opCell = [self.container dequeueReusableCellWithIdentifier:@"OPCell"];
}
self.opCell.opName.text = [[self.data objectAtIndex:indexPath.row] valueForKey:@"name"];
[self.opCell layoutIfNeeded];
CGFloat height = [self.opCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height + 1;
}
Пока что, чтобы заставить его вращаться, я пробовал [self.container reloadData]
, где контейнер - это мой TableView
с willRotateToInterfaceOrientation
и didRotateToInterfaceOrientation
, но безрезультатно. Я также попытался поместить его в viewDidLoad, чтобы, возможно, обнаружить и загрузить, когда представление загружается в альбомном режиме с правильной высотой, но это тоже не сработало. Для iPhone, независимо от того, что я делаю, он загружает высоту для портретного просмотра и не обновляется при повороте.
Я нашел несколько вопросов, которые, как мне показалось, могут помочь, но, похоже, я не могу получить этот ответ работает для меня, хотя мне кажется, что это тот же вопрос, что и у меня, и этот, похоже, больше ориентирован на ширину ячейки, чем на высоту, и я не уверен, что это применимо таким же образом.
Здесь даже есть учебник, который, когда я запускал его на iPhone, также не изменяет размер TableViewCells при вращении.
Этот учебник, похоже, дает некоторое представление об изменении высоты стола, поэтому я добавил код begin/endUpdates
в мой didRotateToInterfaceOrientation
, думая, что это может вызвать изменение, но это тоже не сработало.
Итак, если у кого-то есть какие-либо предложения или кто-то знает решение, я был бы очень признателен, так как этим я бью кирпичную стену!