Nimbus NIPagingScrollView и перекомпоновка при вращении - PullRequest
2 голосов
/ 28 января 2012

Я использую NIPagingScrollView для отображения нескольких страниц на iPhone.

Каждый раз, когда я нажимаю на страницу, следующая страница также предварительно загружается, что нормально.

Когда я поворачиваю iPhone из портретного в альбомный режим, я позволяю layoutSubviews выполнить изменение макета в моем подклассе NIPageView. NIPagingScrollView установлен на автоматическое растяжение по ширине и высоте, чтобы оставаться полноэкранным. Это работает для текущей страницы.

Но когда я переключаюсь на следующую страницу, макет нарушается, поскольку он был предварительно извлечен ранее, а также выложен автоматическим вызовом layoutSubviews.

Я полагаю, что источник не обновляется прямо на следующей странице при вращении или что-то в этом роде.

Есть ли у кого-нибудь подсказка о том, как мне избежать этой проблемы (кроме как без использования Landscape)? И это ошибка в Nimbus?

EDIT: Я обнаружил, что NIPagingScrollView предоставляет методы willRotateToInterfaceOrientation:duration: и willAnimateRotationToInterfaceOrientation:duration:, которые должны вызываться контроллером представления. Я реализовал эти вызовы, но это все равно не помогает.

1 Ответ

0 голосов
/ 19 февраля 2012

Действительно NIPagingScrollView предоставляет эти методы, но если вы посмотрите на них, вы увидите, что вычисления макета основаны на значениях фрейма прокрутки.

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

Таким образом, перед анимацией, ваша прокрутка подкачкипредставление будет иметь правильный ожидаемый кадр, и ваш макет будет пересчитан правильно.

- (void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation
                                     duration: (NSTimeInterval)duration {

    // Your missing line of code to set the scroll view frame values
    [self->_scrollView setFrame:self.view.bounds];

    [self->_scrollView willAnimateRotationToInterfaceOrientation: toInterfaceOrientation
                                                        duration: duration];

    [super willAnimateRotationToInterfaceOrientation: toInterfaceOrientation
                                            duration: duration];

}
...