Отсутствующие кнопки в диалоге AirPrint

Я реализовал AirPrinting из своего приложения, но столкнулся со странной проблемой. При появлении диалогового окна печати кнопки "Отмена" или "Готово / печать" не отображаются, как показано на следующем рисунке.

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

if ([UIPrintInteractionController canPrintURL:pdfUrl]) {  
        UIPrintInfo *aPrintInfo = [UIPrintInfo printInfo];  
        aPrintInfo.outputType = UIPrintInfoOutputGeneral;  
        aPrintInfo.jobName = [NSString stringWithFormat:@"%@-PRINT",[[NSUserDefaults standardUserDefaults] stringForKey:@"Kiosk ID"]];  
        UIPrintInteractionController *aPrintController = [UIPrintInteractionController sharedPrintController];  
        aPrintController.showsNumberOfCopies=YES;  
        aPrintController.showsPaperSelectionForLoadedPapers=YES;  
        aPrintController.printingItem = pdfUrl;  
        aPrintController.printInfo = aPrintInfo;  
        [aPrintController presentAnimated:YES completionHandler:NULL];  
}  

Кто-нибудь имеет опыт работы с этой проблемой и знает, как ее исправить? Что действительно странно, так это то, что действия для этих скрытых кнопок все еще работают; поэтому, если я коснусь, где должна быть кнопка печати, она распечатается, и аналогичным образом я могу закрыть диалоговое окно, нажав в левом верхнем углу, где должна быть кнопка Отмена.

Ура!

PS, используя последнюю версию IOS 11, проблема возникает в симуляторе и на устройстве.

[Изменить] Я только что протестировал пример печати от Apple, найденный по адресу https://developer.apple.com/library/content/samplecode/PrintBanner/Introduction/Intro.html

и хотя код для вызова диалогового окна AirPrint очень похож (особенно после того, как я настроил несколько кусочков своего кода), демонстрационный код работал должным образом (кнопки видны), в то время как мой код все еще не работает. Очень запутанно.

[Редактировать 2] Использование приведенного выше примера кода в новом проекте также работает, как и ожидалось. Тем не менее, в моем полном приложении это не так. У кого-нибудь есть опыт относительно того, почему это может быть? Возможно, системные диалоги зависят от размера приложения? Кажется маловероятным, но в моем приложении, использующем этот код, определенно что-то не так, что не очевидно.

[Правка 3] Я улучшил новый проект, постепенно добавляя те же элементы из моего основного проекта, вплоть до добавления одних и тех же модулей и настройки той же структуры пользовательского интерфейса и добавления элементов UIImage. У него не было точно такого же количества просмотров, и они не делали то же самое, что и мой основной проект, но использование памяти было схожим. И все же все же, это сработало. Повреждения рабочей области - вещь в XCode, что-то закулисное, не представленное ни в каком пользовательском интерфейсе, который мог бы объяснить это?

[Редактировать 4] Я только что создал совершенно новый проект, переустановил все модули, затем переместил мои исходные файлы из моего исходного проекта в новый проект. Без удивления, проблема все еще остается в новом проекте.

[Править 5] Решено! Я наконец нашел проблему благодаря отчасти из принятого ответа ниже. Это происходило из-за того, что глобальный цвет оттенка был установлен на "Очистить", но также имел индивидуальные виды в каждом контроллере, также устанавливая цвет оттенка на очистку. Это повлияло на отображаемое диалоговое окно, поэтому кнопки были невидимы. Как только я изменил Виды, чтобы иметь фактический цвет для свойства Tint, диалоговые кнопки печати снова стали видны.

2 ответа

Решение

Нет прямой проблемы с кодом UIPrintInteractionController. Как вы упомянули, кнопки "Готово" и "Отмена" работают как положено. Единственная проблема - видимость кнопок.

Попробуйте изменить оттенок навигационной панели перед тем, как представить контроллер печати.

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = .black

Примечание:- У меня нет вашего кода. Это только одна из проблем и решений, связанных с вашей проблемой.

Я также использовал ваш код, и он работает, как и ожидалось, у него также есть кнопка отмены и печати в iOS 11. Вот код

([UIPrintInteractionController canPrintURL:self.pdfUrl]) {
        UIPrintInfo *aPrintInfo = [UIPrintInfo printInfo];
        aPrintInfo.outputType = UIPrintInfoOutputGeneral;
        aPrintInfo.jobName = @"test job";
        UIPrintInteractionController *aPrintController = [UIPrintInteractionController sharedPrintController];
        aPrintController.showsNumberOfCopies=YES;
        aPrintController.showsPaperSelectionForLoadedPapers=YES;
        aPrintController.printingItem = self.pdfUrl;
        aPrintController.printInfo = aPrintInfo;
        [aPrintController presentAnimated:YES completionHandler:NULL];
    }

Пожалуйста, проверьте, если pdfUrl имеет действительный URL, также в пользовательском интерфейсе pdf должен загружаться, если это правильный URL.

Ниже приведен URL, который я использую

self.pdfUrl = [NSURL URLWithString:@"http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"];

Изменить 1:-

Прикрепление снимка экрана введите описание изображения здесь

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