AirPrint对话框中缺少按钮

时间:2018-01-08 06:14:37

标签: ios objective-c airprint

我已经从我的应用程序实施了AirPrinting,但我遇到了一个奇怪的问题。每当出现打印对话框时,都不会显示“取消”或“完成/打印”按钮,如下图所示。

enter image description here

我使用的代码如下:

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属性的实际颜色,打印对话框按钮就再次可见。

2 个答案:

答案 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: -

附加截屏enter image description here