Сохранение позиции 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:
и посетите документацию здесь.