Xcode5に無事にアップデートできたのですが
これまで制作したアプリのiAdの表示がiOS7でテストすると
表示位置がこんな感じでズレて表示されてしまいます。
iAdの設置コードはこんな感じで一般的なものを使ってます。
//iAd設置処理 CGRect screenRect = [[UIScreen mainScreen] applicationFrame]; adView = [[ADBannerView alloc] initWithFrame:CGRectZero]; adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; adView.frame = CGRectOffset(adView.frame, 0, screenRect.size.height); [self.view addSubview:adView]; adView.delegate=self; self.bannerIsVisible=NO;
iOS5~6では問題なく表示されていますが
iOS7だと初期状態のiAdバナーの位置がY軸が
20pixel足りなくて画面に表示されてしまう感じです。
どうやら、iOS7ではステータスバーがレイヤーで
重なるようになったので画面がズレてしまうようです。
これはエミュレーターだけの問題で
実機で表示すると問題なく表示されるかと思っていましたが
残念ながら実機でもズレるようです。
ということで、iOS7のときはiOS6のときとは
違う処理を追加しなければなりません。
幸いなことにネットで解決するためのサンプルコードが
公開されていました。
- (void)viewDidLoad { [super viewDidLoad]; if ([[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."][0] intValue] >= 7) //iOS7 later { CGRect statusBarViewRect = [[UIApplication sharedApplication] statusBarFrame]; float heightPadding = statusBarViewRect.size.height + self.navigationController.navigationBar.frame.size.height; CGRect original = self.contentView.frame; CGRect new = CGRectMake(original.origin.x, original.origin.y + heightPadding, original.size.width, original.size.height - heightPadding); self.contentView.frame = new; } }
■iOS7でステータスバーが被る問題への対応 – Kazzzの日記
http://d.hatena.ne.jp/Kazzz/20130923/p1
この方法だとcontentViewを作成して
アウトレットする必要がありますがなかなか良いと思います。
単純にiAdの表示位置だけを直すなら
iOS7のときだけ表示位置にステータスバーの高さを
追加するコードを書いた方が簡単かも。
その場合、iAdのコード部分にある
[[UIScreen mainScreen] applicationFrame]
を
[[UIScreen mainScreen] bounds]
に変えるとステータスバーも含めた画面サイズになるので
iAdの表示がきちんと隠れるようになります。