На iPad я показываю UIPopover
, когда пользователь выбирает ячейки в UITableView
. Ячейка остается выбранной, пока всплывающее окно не будет отклонено.
Когда пользователь поворачивает устройство из книжной в альбомную ориентацию, а выбранная ячейка находилась в нижней части экрана, она исчезает после поворота, и всплывающее окно в конечном итоге указывает на другую (безразличную) ячейку.
Как я могу убедиться, что выбранная ячейка в UITableView
остается на экране при повороте из книжной в альбомную ориентацию?
Обновление: Комбинируя коды Калеба и Квиксильвера, следующее рабочее решение:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect activeCellRect = [self.tableView rectForRowAtIndexPath:self.indexPath];
if ((activeCellRect.origin.y + activeCellRect.size.height) >
(self.view.frame.origin.y + self.view.frame.size.height))
{
// If a row ends up off screen after a rotation, bring it back
// on screen.
[self.tableView scrollToRowAtIndexPath:self.indexPath
atScrollPosition:UITableViewScrollPositionBottom
animated:YES];
}
}
Обновление 2, при изменении положения UIPopover
: После команды прокрутки необходимо отправить сообщение reloadData
в представление таблицы. Тогда метод rectForRowAtIndexPath:
правильно сообщит о новой позиции ячейки (в противном случае это не произойдет, так как она не обновляется должным образом после команды прокрутки)!