LoginSignup
19

More than 5 years have passed since last update.

UITableViewControllerにUIViewを位置固定して貼る方法

Last updated at Posted at 2015-11-12

概要

UIViewControllerにUITableViewと広告バナーを貼るのは至極簡単なのですが
UITableViewControllerに広告バナーを貼るのはかなり遠回りをしなければならなかったので
どうしてもUITableViewControllerでバナー入りの画面を作りたい!という方の為に方法を書きます。

やりたかったこと

UITableViewControllerの下に広告バナーを差し込みたかった。
UITableViewのスクロールは広告バナーの上までにしたい。

何が面倒だったか

  • ベースがUIViewではなくUITableViewなのでself.view addSubViewをするとスクロールにUIViewが追従してしまう
  • 広告バナーの上までをスクロール領域にする
  • UITableViewにaddSubViewするとUIViewに罫線が入ってしまう

などなど…これら全てをクリアしなければなりませんでした。
どうやって回避したか1つずつ書いていきます。

self.view addSubViewをするとスクロールにUIViewが追従してしまう

UITableViewのframeがViewDidAppear以外で変えれないので
これはもうaddSubViewする以外に方法がなかったです。なのでまずはaddSubViewします。
そのあと、UIScrollViewのscrollViewDidScrollでスクロール量に合わせて位置を固定するように座標を書くことで回避できました。

- (void)scrollViewDidScroll:(UIScrollView *)s {
   adView.frame = CGRectMake(adView.x + s.contentOffset.x,
                             adView.y + s.contentOffset.y,
                             adView.width,
                             adView.height);
}

これでひとまず固定が出来ます。

広告バナーの上までをスクロール領域にする

これはaddSubViewしてしまうとなると、UITableViewのcontentInsetをいじるしかありません。

- (void)viewDidLoad {
 tableView.contentInset = UIEdgeInsetsMake(0.f, 0.f, adView.height, 0.f);
 tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.f, 0.f, adView.height, 0.f);
}

こんな感じでバナー分上にあげてあげればそこまでしかスクロールしないようになります。
UIEdgeInsetsは3番目が高さになるので注意です。

UITableViewにaddSubViewするとUIViewに罫線が入ってしまう

これはちょっとなぜこの現象が起きるかわからなかったのですが、
UIViewのalphaを変えても色をつけてもUITableViewの罫線がUIViewが透けているかのように
スクロールにあわせて動いていってしまいました。

UIViewの階層を確認するとUITableViewと同じレイヤーにいることがわかったので
zPositionを使い一段上にすることで固定することができるようになりました。

- (void)viewWillAppear:(BOOL)animated {
 [super viewWillAppear:animated];
 self.adView.layer.zPosition = 1; // ここで階層を1つ上に
}

これでスクロールにも追従しないし、スクロールもちょうどいい位置で止まるし、
罫線も透けないで完璧です!

その他はまりどころ

UITableViewControllerのself.viewの高さはtoolbarやstatusBarの高さが考慮されます。
バナーをぴったりの位置に貼る時にはここを注意してください。

いろいろやったけども本当に面倒だった

UITableViewControllerを使うぐらいならUITableViewを使って
単純にUITableViewの大きさを縮めた方が絶対に楽です。。
理由があってこの方法を使うのであれば、ぜひ参考にしてみてください!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19