willRotateToInterfaceOrientation не вызывается на iOS8

Я использую библиотеку VFR PDF viewer в своем приложении, где я представляю ее следующим образом:

ReaderDocument *document = [ReaderDocument withDocumentFilePath:pdfFile password:nil];
ReaderViewController *vc = [[ReaderViewController alloc] initWithReaderDocument:document];
[self.navigationController pushViewController:vc animated:YES];

Если я запускаю на iOS7, все работает нормально.

Если я запускаю свое приложение на iOS8, метод willRotateToInterfaceOrientation в ReaderViewController никогда не вызывается, поэтому, когда устройство поворачивается, документ не корректно переформатируется.

Однако, если я запускаю демонстрационное приложение, которое поставляется с библиотекой на iOS8, willRotateToInterfaceOrientation в ReaderViewController действительно вызывается, что приводит меня к мысли, что библиотека в порядке, и я делаю что-то не так (или пренебрегаю чем-то) приложение.

Я довольно озадачен таким поведением. Почему в моем приложении на iOS8 не будет вызываться RotateToInterfaceOrientation, а в других вариантах это происходит? Как я могу попытаться отследить это?

2 ответа

Решение

Мне наконец удалось решить мою проблему; Вот в чем проблема, если у кого-то есть такая же проблема.

мой ReaderViewController был представлен из класса, который реализовал viewWillTransitionToSize:withTransitionCoordinator:поэтому устаревшие методы на дочерних контроллерах представления не вызывались.

Кроме того, в этой реализации это не вызывало

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

и так viewWillTransitionToSize:withTransitionCoordinator: Метод всех дочерних контроллеров представления также не вызывался.

Исправление состояло в том, чтобы добавить вызов

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

в родительские ВК viewWillTransitionToSize:withTransitionCoordinator: метод, подкласс ReaderViewControllerзатем добавьте viewWillTransitionToSize:withTransitionCoordinator: в мой подкласс для вызова соответствующих методов в ReaderViewController,

Просто потому что willRotateToInterfaceOrientation больше не называется в iOS8, это устарело.

Если новые методы ротации не реализованы, и проект компилируется с помощью iOS 8 SDK, контроллеры представления - не будут получать вызовы - устаревшие методы ротации.

Подобный вопрос к вам может быть найден здесь

Цитирование @mluisbrown:

Методы ротации устарели в iOS 8 SDK. Это никак не повлияет на приложения, созданные с помощью iOS 7 SDK, даже на iOS 8 и, возможно, в нескольких будущих версиях iOS.

Я немного боролся с какой-то проблемой, похожей на вашу. Я пытался следовать рекомендации Apple, чтобы использовать viewWillTransitionToSize, что в моем случае не решило мою проблему, потому что это срабатывает только при изменении с обычного на компактное, например, не на вращение.

viewWillTransitionToSize: withTransitionCoordinator: сделать корректировки на основе интерфейса.

Что подробно описано в документации Apple

Кроме того, видео WWDC 2014 объясняет это, но я не могу вспомнить, какое это было видео. Возможно тот на What's new in Cocoa touch или тот, на View Controller Advancements in iOS 8,

РЕДАКТИРОВАТЬ

Обратите внимание, что в моем случае viewWillTransitionToSizeКак объяснено, не был вызван, потому что я не переходил с обычного на компактный, поэтому не было никакого перехода размера, строго говоря для Apple.

Единственное решение, которое я нашел, было обработать это вручную в viewDidLayoutSubviews соответствующего контроллера представления.

В моем случае я хотел отслеживать верхнюю ячейку, отображаемую в табличном представлении с помощью autolayout. Поскольку система не отслеживала это автоматически, мне пришлось проверить это вручную и вручную прокрутить до нужной ячейки при вращении. Вот почему я так и сделал. Это довольно "тяжело", но работает в моем случае.

Мне также было бы интересно, если у кого-нибудь есть более простое решение.

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