Отсутствующие кнопки в диалоге 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:-