Сохранение позиции UIScrollView после изменения ориентации интерфейса

У меня есть UIScrollView, который обновляет свой кадр после каждого изменения ориентации интерфейса, сохраняя его высоту, но динамически обновляя его ширину, чтобы всегда заполнять новую ширину. Поскольку это горизонтальная прокрутка с включенной подкачкой, естественно, я обновляю его содержимое в соответствии с его новым размером. Я делаю это следующим образом (очевидно, это упрощенный код, но вы должны понять):

scrollView.frame = CGRectMake(0.0f, 0.0f, window.size.width, 200.0f);
// Content is being deleted here
// Then redraw with the new width in mind
scrollView.contentSize = (window.size.width * [database count]);
[scrollView setContentOffset:CGPointMake(currentPostionX, 0.0f) animated:NO];

Этот метод работает просто отлично; scroll view сохраняет свою прежнюю позицию после каждого изменения ориентации интерфейса. Моя проблема в том, что это не гладко. На самом деле это довольно некрасиво, часто приводя к дрожанию, скачке "анимации", когда сбрасывается contentOffset (и не имеет значения, если я установил 'animated' в YES).

Должен быть лучший способ сделать это и заставить представление прокрутки сохранять свое положение в соответствии с его новыми размерами.

Есть идеи?

Обновление: на самом деле, я вызываю вышеупомянутые методы в разделе animateAlongsideTransition viewWillTransitionToSize, так как это создает довольно хороший переход при изменении между различными размерами. Если я помещу их в секцию завершения, после поворота все просто "встанет" на место, что довольно уродливо. Таким образом, все гладко, кроме прыжков в правильное положение в самом конце.

1 ответ

В этом ответе я буду предполагать, что ваше утверждение:

... UIScrollView, который обновляет свой кадр после каждого изменения ориентации интерфейса...

действительно означает после каждого изменения ориентации интерфейса.

Если так, используйте -viewWillTransitionToSize:withTransitionCoordinator: и посетите документацию здесь.

Другие вопросы по тегам