Метод делегата QLPreviewController не вызывается в iOS 10, но вызывается, если выполняется раньше, чем iOS 10

Вот мой код Это может звучать как избыточный вопрос, но мой сценарий отличается, так как я не добавляю QLPreviewController в качестве подпредставления, а представляю в качестве контроллера.

После загрузки из Dropbox, я представляю это как

    self.pdfViewController = [[QLPreviewController alloc] init];
    self.pdfViewController.delegate = self;
    self.pdfViewController.dataSource = self;

    [self presentViewController:self.pdfViewController animated:YES completion:nil];

и у меня также есть QLPreviewControllerDataSource, QLPreviewControllerDelegate указан в качестве протокола. Кроме того, он работает, если работает в более ранней версии, чем iOS 10.0.

Пожалуйста, помогите мне.

1 ответ

Похоже, iOS 10 изменил способ QLPreviewController представлена. На iOS 9 при предварительном просмотре изображения, представив QLPreviewController Модально я вижу хороший эффект масштабирования, и начальное состояние предварительного просмотра с черным фоном и скрытой навигацией и панелью инструментов. Я могу нажать на изображение, чтобы сделать полосы видны (который меняет фон на белый). Повторное нажатие переключает состояние.

На iOS 10 тот же код приводит к появлению белого фона и неправильной анимации масштабирования (кажется, что она появляется в нижней части экрана).

Я обнаружил, что реализация этого практически недокументированного нового метода источника данных для iOS 10 устранила проблему:

- (UIView* _Nullable)previewController:(QLPreviewController *)controller
          transitionViewForPreviewItem:(id <QLPreviewItem>)item
{
    return [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:MIDPhotoImageRowIndex_Image inSection:MIDPhotoSectionIndex_Image]];
}

Представление, которое я возвращаю, совпадает с previewController:frameForPreviewItem:inSourceView: используется в качестве ссылки для исходного кадра содержимого (т. е. представление изображения в ячейке моей таблицы).

Документация для этого метода делегата на момент написания просто говорит "Нет доступных обзоров".

Реализация этого метода означала, что previewController:frameForPreviewItem:inSourceView: теперь вызывается на iOS 10. Я просто хотел бы, чтобы был способ по умолчанию к исходному черному фону без панелей навигации.

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