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

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

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

AdMobは、事前に指定した条件に従ってアプリに広告を表示するGoogleのサービス。開発者の向けのサービスで、広告を掲載することにより、収益を得ることが可能です。その他、見た目や雰囲気などアプリに合う広告に変更したり、広告表示の場所を指定することもできます。

Swift

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

Q&A

1回答

899閲覧

Admobアダプティブバナー実装時の他の縦サイズ可変viewのconstraintsの設定について

exampapa

総合スコア13

AdMob

AdMobは、事前に指定した条件に従ってアプリに広告を表示するGoogleのサービス。開発者の向けのサービスで、広告を掲載することにより、収益を得ることが可能です。その他、見た目や雰囲気などアプリに合う広告に変更したり、広告表示の場所を指定することもできます。

Swift

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

0グッド

0クリップ

投稿2020/11/24 16:40

Xcodeの12.2でAdmobのアダプティブバナーを実装する際のAutolayoutの設定で質問があります。
レイアウトを上から、

Label(Height Equals:10)
NV_Stack View(Top space to:Label Equals:0とBottom space to:BannerView Equals:0)
BannerView(Top space to:NV_Stack View Equals:0)

のように配置し()内に記載されているような制約をつけているのですが、NV_Stack ViewのサイズがBannerViewにくっつかず短くなってしまいます(Intrinsic SizeはPlaceholderにして高さ50にはしているのですが)。
スマートバナーの時は、BannerViewに高さ50の制約をつけていたため、NV_Stack Viewのサイズが自動的にデバイス毎に適切なサイズに変動することができたのですが、アダプティブバナーでは高さの制約をつけないため、シュミレーターの段階でもサイズがBannerViewまで届かない状態になっています。

priorityの設定をすれば解決できるような気がするのですが、色々設定してもうまくできず質問させていただいた次第です。

そもそもアダプティブバナーは、viewDidapperの段階で、バナーの高さを決定するようなのですが、その後に真ん中のNV_Stack Viewの高さがAutolayoutの設定に基づいて変更されるという動作が可能なのでしょうか(viewDidapperが実行される段階では、すでにNV_Stack Viewの高さは決まってしまっている?)。

説明がわかりにくいかもしれませんが、アダプティブバナー実装時の、
autolayoutの設定についてご教授いただけると幸いです。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決したので万が一同じ疑問を持った人のために解決策を記載します。

まず、viewのレイアウト設定ですが、下記のように変更しました。

Label (Height Equals: 10)
NV_Stack View (Top space to: Label Equals: 0 and Bottom space to: DammyLabel)
DammyLabel (Height Equals: 90, Align Bottom to Safe Area, Top space to: NV_Stack View)
BannerView (Align Bottom to Safe Area)

DammyLabelを追加し、暫定的にこのheightを90にしておきます
(これはアダプティブアンカーバナーの高さの最大値です)。

そして、次にviewDidAppearのバナーがロードされた後に下記のようにコードを入れます。

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
loadBannerAd()
DammyLabel.constant = bannerView.bounds.height←これです
}

ここでバナーの縦サイズを取得して、DammyLabelの高さをバナーと同じにしてるんです。

恐らく、DammyLabelを使わなくても、NV_Stack ViewをAlign Bottom to Safe Areaにしておいて、
上記のviewDidApperでNV_Stack Viewの現在の高さからbannerViewの高さを引いた高さに設定し直せばいいと思うのですが、そのコードの書き方がよくわかりませんでした(誰か教えて欲しい)。

また、どうやらviewのレイアウトはこのviewDidApperの後で実行されるみたいですね。

いや〜、ほんとこんな簡単な事もわからないのが素人なんですよね。
Google Groupのadmobチームに聞いてる中でも直接的な答えはなかったんですが、なんか色々聞いているうちに、上の解決方法が降りてきましたw
みなさまありがとうございました。

投稿2020/11/27 15:02

exampapa

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問