質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

解決済

2回答

4264閲覧

iPadOS13よりUIWebViewでPDFが表示されなくなりました

Ossan

総合スコア6

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

1クリップ

投稿2020/02/25 14:03

前提・実現したいこと

Objective-cでUIWebViewを使用しPHPからPDFを表示しております。
iPadOS13になってからPDFがテキストエディタで開いた表な状態で描画されるようになってしまいました。
iOS12のiPAdでは正常にPDFが描画されます。
iPadOS13でも正常に表示させるにはどうすればよいでしょうか?
iOS開発ほぼ初心者になります。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

iPadOS13 な iPad はいま手元にないので確認できませんが、**UIWebView は iOS8 以降は非推奨**となっていますし、Appleも日本語のページで WebKit への移行を促しているので、どんな不具合があっても仕方がないことだと思います。

投稿2020/02/25 14:12

編集2020/02/25 14:16
TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thyda.eiqau

2020/02/26 01:47

この問題はUIWebViewでもWKWebViewでも同様に発生しています
guest

0

ベストアンサー

開く先が確実にPDFであるなら、PDFKitを使うのがよいかと思います。
当方でも類似の問題に直面しており、現時点では顧客側要件(WebViewで表示する先が、普通のWebコンテンツとPDFとをURL等で判別できるのかどうか?)がはっきりしないため実装にまで着手できていません、対応策が固まったらこちらにもShareしたいと思います。

同じ現象ではありませんが関連するteratailの質問とStackoverflowを貼っておきます。こちらは、表示が真っ白になったり遷移しなかったりという内容です。


Mar 11, 2020 追記
仕様固めに時間がかかってしまいました。
「いったんWebコンテンツを開くが、PDFのダウンロードリンクを開く場合がある」というシチュエーションで、当方では下記のように実装しました。ご参考になれば幸いです。

objectivec

1// MyWebViewController.h 2#import <UIKit/UIKit.h> 3#import <WebKit/WebKit.h> 4#import <QuickLook/QuickLook.h> 5 6NS_ASSUME_NONNULL_BEGIN 7 8@interface MyWebViewController : UIViewController <WKNavigationDelegate, WKUIDelegate, QLPreviewControllerDataSource> 9 10@property (nonatomic) NSString *firstUrl; 11 12@end 13 14NS_ASSUME_NONNULL_END

objectivec

1// MyWebViewController.m 2 3@interface MyWebViewController() 4 5@property (nonatomic) WKWebView *webView; 6@property (nonatomic) NSString *previewFilePath; 7 8@end 9 10- (void)viewDidLoad { 11 [super viewDidLoad]; 12 self.webView = [[WKWebView alloc] init]; 13 self.webView.navigationDelegate = self; 14 self.webView.UIDelegate = self; 15 self.webView.translatesAutoresizingMaskIntoConstraints = false; 16 17 [self.view addSubview:self.webView]; 18 // 制約の設定等は省略... 19} 20 21- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { 22 NSURL *url = navigationAction.request.URL; 23 if([url.absoluteString compare:self.firstUrl] == NSOrderdSame) { 24 decisionHandler(WKNavigationActionPolicyAllow); 25 return; 26 } 27 28 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 29 [[NSURLSession.sharedSession dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 30 if(error != nil || data == nil || data.length == 0) { 31 NSString *errorDescription = [@"ファイルのダウンロードに失敗しました。" stringByAppendingString:error.localizedDescription]; 32 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"通信エラー" message:errorDescription preferredStyle:UIAlertControllerStyleAlert]; 33 [alertController addAction:[UIAlertAction actionWithTitle:@"閉じる" style:UIAlertActionStyleDefault handler:nil]]; 34 dispatch_async(dispatch_get_main_queue(),^{ 35 [self presentViewController:alertController animated:YES completion:nil]; 36 }); 37 decisionHandler(WKNavigationActionPolicyCancel); 38 return; 39 } 40 41 // PDF以外はとりあえず通すが何が起こっても知らない 42 NSHTTPURLResponse *res = (NSHTTPURLResponse*)response; 43 if([res.allHeaderFields[@"Content-Type"] compare:@"application/pdf"] != NSOrderedSame) { 44 decisionHandler(WKNavigationActionPolicyAllow); 45 return; 46 } 47 48 NSString * __block filename = @"ダウンロードファイル"; 49 [[(NSString*)res.allHeaderFields[@"Content-Disposition"] componentsSeparatedByString:@";"] enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 50 NSArray<NSString*> *pair = [[obj stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet] componentsSeparatedByString:@"="]; 51 if([pair[0] compare:@"filename"] != NSOrderedSame) return; 52 filename = [pair[1] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet]; 53 if([filename hasPrefix:@"\""]) filename = [filename substringFromIndex:1]; 54 if([filename hasSuffix:@"\""]) filename = [filename substringToIndex:filename.length - 1]; 55 }]; 56 57 NSString *filePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/"] stringByAppendingPathComponent:filename]; 58 [data writeToFile:filePath atomically:YES]; 59 self.previewFilePath = filePath; 60 61 dispatch_async(dispatch_get_main_queue(),^{ 62 MyQuickLookViewController* ql = [[MyQuickLookViewController alloc] init]; 63 [self.navigationController pushViewController:ql animated:YES]; 64 ql.dataSource = self; 65 [ql refreshCurrentPreviewItem]; 66 }); 67 68 decisionHandler(WKNavigationActionPolicyCancel); 69 }] resume]; 70 }); 71} 72 73// MARK: - QuickLook 74- (void)presentQuickLookPreviewController { 75 dispatch_async(dispatch_get_main_queue(),^{ 76 MyQuickLookViewController* ql = [[MyQuickLookViewController alloc] init]; 77 [self.navigationController pushViewController:ql animated:YES]; 78 ql.dataSource = self; 79 [ql refreshCurrentPreviewItem]; 80 }); 81} 82 83// MARK: QLPreviewControllerDataSource 84- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController*)previewController { 85 return 1; 86} 87 88/// プレビューするファイルのパスを NSURL で返す 89- (id<QLPreviewItem>)previewController:(QLPreviewController*)controller previewItemAtIndex:(NSInteger)index { 90 NSURL *url = [NSURL fileURLWithPath:self.previewFilePath]; 91 return url; 92}

投稿2020/02/26 02:23

編集2020/03/11 13:49
thyda.eiqau

総合スコア2982

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ossan

2020/03/16 23:45

丁寧なご回答ありがとうございます。 1点確認させてください。 「MyQuickLookViewController」は、何でしょうか? 初心者の質問で申し訳ございません。
thyda.eiqau

2020/03/17 00:13

QuickLookを乗せただけのViewControllerです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問