どもです。
フロントエンドでiOSとかAndroidとかのアプリ作ってるpeterです。

最近iOSアプリばかり作っていたので、Androidのことを忘れてしまいそうです。。というか4.2にいつの間にかリリースされ、5へのメジャーアップデートも噂され、若干時代に置いてきぼりです。

さて今回はタブバーの下に広告バナーを入れようとしたら結構はまったので、ほかに同じような問題にぶつかってる人の助けになれば幸いです(あんましないかもですが)

iOSのタブバーの下に広告バナーを入れる方法

photo

今回は、Google Admobの広告バナーを使用します。
メディエーションでいろいろなサードパーティ広告を出せるので最近使っています。
あとAdmobに関しては解説なしで進めさせていただきます。
すいません。
あとTaBBarはデザインでカスタムする前提です。
すいません。。

では順に説明して行きたいと思います。

最終的な階層は以下のようになります。
TabBarController
 ⌊ UITaBBar
  ⌊ adView

UITabBarがUIViewのサブクラスなのでそれを利用します。

続きを読む

1. UITabBarControllerのサブクラス実装

1-1. UITabBarControllerのサブクラスTabBarControllerの作成

まずUITabBarControllerのサブクラスTabBarControllerを作成し、TabBarサイズの広告が入るframeに変更します。

1-2. 広告の挿入

次に空いたスペースに広告を入れます。

これでひとまず広告は表示されるようになると思いますが、
問題が二点あります。

  1. TabBarControllerのサブビューが正しくないこと
  2. UITabBarItemが縦に間延びしてしまっていること

一つずつ解決して行きましょう

1-3. TabBarControllerのサブビューの調整

これはTabBarContollerのviewDidLayoutSubviewsをオーバーライドしてサイズ調整を行います。

1-4. UITabBarItemの調整

※Systemデフォルト画像はimageInsetsで位置調整できなかったので、文字だけ移動させてます

ちょっとselectionIndicatorImageがあると見た目上よろしくないのでAppDelegateで

UITabBarItem setFinishedSelectedImage:withFinishedUnselectedImage:
でカスタム画像をいれてimageInsetで調整すれば見た目上は問題ないはずです。

参照 github:https://github.com/svartalfheim/AdTabBarController

2.余談

実は初めにRootViewController(Is Initial View Controller=true)を作成し、そのViewにUITabBarControllerとadViewを貼付けたんですが、うまくいかなかったので上記のような方法をとりました。

そのときの階層関係は以下のような感じです。
RootViewController
 ⌊ TabBarController
 ⌊ adView

この方法ですと、見た目上はうまくいくのですが、
いろいろな問題をはらんでいます。

2-1. TabBarControllerの位置がずれる

実はプログラムで簡単に修正できるのですが、ちょっと戸惑いました。

以下修正コード
RootViewController.m

2-2. クラッシュする

背景透過なモーダルビューを作ろうとしてかなりはまりました。

iOS5では問題なかったのですがiOS6だと下記の記述で確実にクラッシュします。

スクリーンショットを撮ってそれを背景にして背景透過っぽいこともできるんですが、明らかにバグがあるのはちょっと嫌だったので、この方法はやめました。

それにしてもStoryboardすっごい便利ですね!

あともっといい方法があるという方はぜひ教えてください〜!

あわせて読みたい記事