iOS7 以降iAd のバナー表示は1行の記述だけで表示できるようになりました。
self.canDisplayBannerAds = true
しかし、このステートメントによるバナー表示では、バナー表示位置が画面最下部となる上、バナー表示によってその他のUI部品の位置が影響を受ける場合があります。下の例では広告の有無によって下部にある灰色のボタンの位置がずれます。
図1 バナー表示
このバナー表示で画面の移動を防ぐためには、他のUI部品のレイアウト設定の際に画面の下部との間のConstraint を使わないようにするか、UI部品の位置をプログラムで設定する必要があります。
self.centerBanner.delegate = self
self.centerBanner.hidden = true
一方、storyboard のライブラリあるいは、コードでADBannerView を置いてそこにバナー表示をさせる方法もあります。
この場合には、広告の取得の有無によってDelegate でこのBannerView のhidden プロパティで表示を制御します。
こうすると、少し面倒ですが、画面表示は影響を受けなくなります。
下の例では広告表示の有無にかかわらずボタンの位置は変わりません。
図3 バナー表示
この場合には、storyboardでADBannerView を配置して、表示するビューコントローラクラスにリンクして、上記の2行のコードと、Delegate メソッドの実装が必要です。
例
import UIKit
import iAd
class ViewController: UIViewController, ADBannerViewDelegate {
@IBOutlet weak var centerBanner: ADBannerView!
override func viewDidLoad() {
super.viewDidLoad()
self.centerBanner.delegate = self
self.centerBanner.hidden = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func bannerViewDidLoadAd(banner: ADBannerView!) {
self.centerBanner?.hidden = false
}
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
return willLeave
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
self.centerBanner?.hidden = true
}
@IBAction func myButton(sender: UIButton) {
if self.centerBanner.hidden {
self.centerBanner.hidden = false
} else {
self.centerBanner.hidden = true
}
}
}