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

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

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

397閲覧

swift4 デバイスローテイトするとバナーが表示されない

harima

総合スコア17

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/09/29 06:14

編集2022/01/12 10:55

以前は正常にデバイスの向きに合ったバナーが表示されていたのですが、xcode9を使い出して、横向きの時にバナーが表示されないようになりました。申し訳ありませんが、どなたか対策を教えていただけないでしょうか?

swift

1import UIKit 2import WebKit 3import GoogleMobileAds 4import CoreLocation 5 6class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, GADBannerViewDelegate { 7 8 var myWebView: WKWebView! 9 var locationManager: CLLocationManager! 10 var bannerView: GADBannerView! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 let devMaxWidth : CGFloat = self.view.bounds.width 16 let devMaxHeight : CGFloat = self.view.bounds.height 17 print("(devMaxWidth)" + "," + "(devMaxHeight)") 18 19 locationManager = CLLocationManager() // インスタンスの生成 20 locationManager.delegate = self // CLLocationManagerDelegateプロトコルを実装するクラスを指定する 21 22 // WebViewの生成. 23 if ((devMaxWidth == 375.0) && (devMaxHeight == 812.0)){ 24 myWebView = WKWebView(frame: CGRect(x: 0.0, y: 50.0, width: devMaxWidth, height: devMaxHeight - 150.0 )) 25 print("iPhone X") 26 } else { 27 myWebView = WKWebView(frame: CGRect(x: 0.0, y: 20.0, width: devMaxWidth, height: devMaxHeight - 70.0 )) 28 print("iPhone") 29 } 30 myWebView.translatesAutoresizingMaskIntoConstraints = false 31 myWebView.isUserInteractionEnabled = true 32 myWebView.uiDelegate = self 33 myWebView.navigationDelegate = self 34 myWebView.allowsBackForwardNavigationGestures = true 35 self.view.addSubview(myWebView) 36 37 let url = URL(string: "https://www.google.co.jp") 38 let request = URLRequest(url: url!) 39 self.myWebView.load(request) 40 41 bannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait) 42 if ((devMaxWidth == 375.0) && (devMaxHeight == 812.0)){ 43 bannerView.frame = CGRect(x: 0.0, y: devMaxHeight - 100.0, width: devMaxWidth, height: 50) 44 print("iPhone X") 45 } else { 46 bannerView.frame = CGRect(x: 0.0, y: devMaxHeight - 50.0, width: devMaxWidth, height: 50) 47 print("iPhone") 48 } 49 bannerView.backgroundColor = UIColor.black 50 self.view.addSubview(bannerView) 51 bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" 52 bannerView.rootViewController = self 53 bannerView.load(GADRequest()) 54 } 55 56 override func didReceiveMemoryWarning() { 57 super.didReceiveMemoryWarning() 58 // Dispose of any resources that can be recreated. 59 } 60 61 62 63 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 64 print("ページ読み込み完了しました!") 65 } 66 67 func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { 68 print("ページ読み込み開始しました!") 69 } 70 71 func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { 72 print("エラー1:(error)") 73 } 74 75 func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { 76 print("エラー2:(error)") 77 } 78 79 func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) { 80 let currenturl = self.myWebView.url 81 print("リダイレクト:(String(describing: currenturl))") 82 83 } 84 85 86 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { 87 guard let url = navigationAction.request.url else { 88 return nil 89 } 90 91 guard let targetFrame = navigationAction.targetFrame, targetFrame.isMainFrame else { 92 webView.load(URLRequest(url: url)) 93 return nil 94 } 95 return nil 96 } 97 98 99 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 100 super.viewWillTransition(to: size, with: coordinator) 101 // デバイスのサイズチェック 102 let devMaxWidth : CGFloat = self.view.bounds.width 103 let devMaxHeight : CGFloat = self.view.bounds.height 104 print("(devMaxWidth)" + "," + "(devMaxHeight)") 105 106 // デバイスの回転検知 107 108 switch UIDevice.current.orientation { 109 case UIDeviceOrientation.landscapeLeft: 110 print("左が上") 111 break 112 case UIDeviceOrientation.landscapeRight: 113 print("右が上") 114 if ((devMaxWidth == 375.0) && (devMaxHeight == 812.0)){ 115 print("iPhone X") 116 myWebView.frame = CGRect(x: 50.0, y: 0.0, width: devMaxHeight - 100.0, height: devMaxWidth - 50) 117 bannerView.frame = CGRect(x: 50.0, y: devMaxWidth - 50.0, width: devMaxHeight - 100, height: 50) 118 } else { 119 print("iPhone") 120 myWebView.frame = CGRect(x: 0.0, y: 20.0, width: devMaxHeight - 50.0, height: devMaxWidth - 70.0) 121 bannerView.frame = CGRect(x: 0.0, y: devMaxWidth - 70.0, width: devMaxHeight, height: 50.0) 122 } 123 break 124 case UIDeviceOrientation.portrait: 125 print("上向き") 126 if ((devMaxWidth == 812.0) && (devMaxHeight == 375.0)){ 127 print("iPhone X") 128 myWebView.frame = CGRect(x: 0.0, y: 50.0, width: devMaxHeight, height: devMaxWidth - 150.0) 129 bannerView.frame = CGRect(x: 0.0, y: devMaxWidth - 100.0, width: devMaxHeight, height: 50.0) 130 } else { 131 print("iPhone") 132 myWebView.frame = CGRect(x: 0.0, y: 20.0, width: devMaxHeight, height: devMaxWidth - 70.0) 133 bannerView.frame = CGRect(x: 0.0, y: devMaxWidth - 50.0, width: devMaxHeight, height: 50.0) 134 } 135 break 136 default: 137 print("下向き") 138 break 139 } 140 } 141 142 143 override var prefersStatusBarHidden: Bool { 144 return false 145 } 146} 147 148 149extension ViewController: CLLocationManagerDelegate, UIAlertViewDelegate { 150 func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 151 switch status { 152 case .notDetermined: 153 print("ユーザーはこのアプリケーションに関してまだ選択を行っていません") 154 locationManager.requestWhenInUseAuthorization() // 起動中のみの取得許可を求める 155 break 156 case .denied: 157 print("ローケーションサービスの設定が「無効」になっています (ユーザーによって、明示的に拒否されています)") 158 let alert = UIAlertController(title: "ローケーションサービスの設定が「無効」になっています。", message: "「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」", preferredStyle: .alert) 159 alert.addAction(UIAlertAction(title: "OK", style: .default)) 160 self.present(alert, animated: true, completion: nil) 161 // 「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」を表示する 162 break 163 case .restricted: 164 print("このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)") 165 let alert = UIAlertController(title: "このアプリケーションは位置情報サービスを使用できません", message: "「このアプリは、位置情報を取得できないために、正常に動作できません」", preferredStyle: .alert) 166 alert.addAction(UIAlertAction(title: "OK", style: .default)) 167 // 「このアプリは、位置情報を取得できないために、正常に動作できません」を表示する 168 break 169 case .authorizedAlways: 170 print("常時、位置情報の取得が許可されています。") 171 // 位置情報取得の開始処理 172 break 173 case .authorizedWhenInUse: 174 print("起動時のみ、位置情報の取得が許可されています。") 175 // 位置情報取得の開始処理 176 break 177 } 178 } 179}

よろしくお願いいたします。

書き忘れましたが、
GoogleMobileAds.framework
を使っています。

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

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

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

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

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

fuzzball

2017/10/02 01:01

viewWillTransitionの中のswitch分で正しく分岐出来ていないのでしょうか?それともデバイスサイズが正しく取得できていないのでしょうか?
harima

2017/10/02 04:44

switch文の分岐もデバイスサイズの取得もできております。Hardware -> Rotate Right を実行すると一瞬バナーが見えて、遠くに離れていくように見えます。
guest

回答1

0

GADBannerViewの代わりにUIViewで試しましたが、正しく画面下に表示されましたので、GADBannerViewの問題のような気がするのですが、どうでしょうか?
iOS11、Xcode9などに対応しているか確認して下さい。

あと質問とは関係ないですが、.landscapeRight "左が上"だと思います。

投稿2017/10/02 05:11

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問