我已经从我的应用程序实施了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];
}
有没有人有这个问题的经验,知道如何纠正?真正奇怪的是,这些隐藏按钮的动作仍然有效;因此,如果我点击打印按钮所在的位置,它就会打印出来,同样我可以通过点击“取消”按钮所在的左上角来关闭对话框。
干杯!
p.s使用最新版本的IOS 11,问题发生在模拟器和设备上。
[编辑]我刚刚测试了Apple发现的打印示例 https://developer.apple.com/library/content/samplecode/PrintBanner/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013422-Intro-DontLinkElementID_2
尽管启动AirPrint对话框的代码非常相似(在我调整了一些代码后更多),但是我的代码仍然没有按预期工作(按钮可见)。非常混乱。
[编辑2]在新项目中使用上面的代码示例也可以按预期工作。然而,在我的完整应用程序中,它没有。有谁有经验为什么我的?系统对话框是否会受到应用程序大小的影响?似乎不太可能,但我的应用程序使用此代码肯定存在一些问题并不明显。
[编辑3]我通过逐步引入我的主项目中的相同元素来增强新项目,直到引入相同的Pod并设置相同的UI结构,并添加UIImage元素。它没有完全相同数量的视图,并且那些与我的主项目没有做同样的事情,但内存使用情况类似。然而,它仍然有效。工作区损坏是否是Xcode中的一个问题,在幕后没有在任何可能解释这个问题的UI中表示的东西?
[编辑4]我刚创建了一个全新的项目,重新安装了所有的pod,然后将我的源文件从原始项目移动到新项目。令人惊讶的是,这个问题仍然存在于新项目中。
[编辑5]解决了!我终于找到了这个问题,部分归功于下面接受的答案中的提示。这是因为全局色调颜色设置为“清除”,但每个控制器中还有单独的视图,同时将色调颜色设置为清除。这会影响显示的对话框,因此按钮不可见。一旦我将视图更改为具有Tint属性的实际颜色,打印对话框按钮就再次可见。
答案 0 :(得分:3)
UIPrintInteractionController代码没有直接问题。如你所说,点击完成并取消按钮按预期工作。唯一的问题是按钮的可见性。
尝试在显示打印控制器之前更改导航栏色调颜色。
self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = .black
注意: - 我没有你的代码。这只是与您的问题相关的问题和解决方案之一。
答案 1 :(得分:1)
我也使用了你的代码,它正如预期的那样在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,同样在UI中,如果它是有效的URL,则应加载pdf。
以下是我正在使用的网址
self.pdfUrl = [NSURL URLWithString:@"http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"];
编辑1: -