読者です 読者をやめる 読者になる 読者になる

UITableView の下に ADBannerView を配置するだけのライブラリ書いた

objective-c ios

UITableView の下に ADBannerView を置くのは、無料+広告アプリでは定番レイアウト。 自分が作る iOS アプリでも採用している。

以前、

っていう記事を書いたけど、この方法はもう使っていない。 UITableView のフッターを設定しているので、表示データが 0 件だと行の区切り線が描画されない。 まっさら。 見た目が格好悪いので違う方法に切り替えた。

今採用している方法は超単純。 まず画面外に ADBannerView を置いておいて、広告の取得に成功したら画面下に移動して表示するだけ。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect frame = CGRectMake(0,
                              self.view.frame.size.height,
                              0,
                              0);
    _bannerView = [[ADBannerView alloc] initWithFrame:frame];
    _bannerView.delegate = self;
    [self.view addSubview:_bannerView];
}

#pragma mark - ADBannerViewDelegate

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    CGFloat contentHeight = self.view.frame.size.height - banner.frame.size.height;
    self.tableView.frame = CGRectMake(0,
                                        0,
                                        self.tableView.frame.size.width,
                                        contentHeight);
    banner.frame = CGRectMake(0,
                              contentHeight,
                              self.view.frame.size.width,
                              banner.frame.size.height);
    banner.hidden = NO;
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    self.tableView.frame = CGRectMake(0,
                                        0,
                                        self.view.frame.size.width,
                                        self.view.frame.size.height);
    banner.frame = CGRectMake(0,
                              self.view.frame.size.height,
                              banner.frame.size.width,
                              banner.frame.size.height);
    banner.hidden = YES;
}

アプリを作るたびに毎回同じコードを書きたくないので、 広告の配置をコントロールするライブラリを自作して使いまわしている。

iAD のみ対応。 広告の表示位置は画面下部だけ。 自分が使う最小限の機能だけを実装している。 AdMob 対応や広告の表示位置変更は、必要になったらそのとき実装するかも。

2016/10/27 追記

Apple が iAd から撤退するのでライブラリの公開はやめた。