面倒くさがりなのでブログを書く頻度が少なかったのだが、なるべく細かい記事でも書くことにした。
iOS7がリリースしてしばらく経つのだが、ようやくひと通りiOS7対応が終わった。
後手後手の対応で、アップデートが遅くなってしまいスミマセン。
今回はメジャーアップデートということもあり、大幅なUI変更が加わった。
流行のフラットUIに変わったことで、iOS6以前と両方サポートするアプリは少し大変かもしれない。
ステータスバーが一体化した
一番やっかいな問題が、ステータスバーの一体化だ。
ステータスバーをアプリから操作(色の変更や透過、表示・非表示)出来るようになったため、UINavigationBarなどと違和感なく一体化させることが可能になった。
今まではステータスバーを除いた座標から取得出来ていたのだが、iOS7からはステータスバーの20px分が含まれなくなった。このせいでデザインが崩れてしまうアプリがけっこうあると思う。
手っ取り早いのは、UIWindowをステータスバー分ずらしてしまうことだ。こうすることでiOS6以前と同じように処理することができる。
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0f) { [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; self.window.clipsToBounds = YES; self.window.frame = CGRectMake(0, 20.0f, self.window.frame.size.width, self.window.frame.size.height - 20.0f); self.window.bounds = CGRectMake(0, 20.0f, self.window.frame.size.width, self.window.frame.size.height); }
UINavigationBarのbarTintColorやtintColorを変更することで、ステータスバーの色も変わる。
UINavigationBarの戻るが変わった
前のビューに戻るときのボタンが「<」みたいなのになった。
そのため、backBarButtonItemなどにイメージ付きのUIBarButtonItemを設定すると、「<」分ズレて表示がおかしくなる。
僕は手っ取り早く、backBarButtonItemではなく、leftBarButtonItemに設定してしまった。
具体的には、UINavigationControllerを派生したクラスを作成し、pushViewControllerをオーバーロードする。
その中で、viewControllersをカウントし、0以上の場合(一つ以上ビューがプッシュされている)に、戻るボタンを設定する。例えば以下のようなコードになる。
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if ([self.viewControllers count] > 0) { viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back.png"] style:UIBarButtonItemStylePlain target:self action:@selector(popViewControllerAnimated_)]; } [super pushViewController:viewController animated:animated]; } - (void)popViewControllerAnimated_ { [self popViewControllerAnimated:YES]; }
カスタムUIBarButtonItemのアイコン色が反映されない
iOS7になってから、ボタンに設定した画像がtinColor(青色とか)で塗りつぶされるようになった。
UIBarButtonItem内にUIButtonをカスタムビューとして設定していたのだが、tintColorで塗りつぶされなかった。
どうやら、UIButtonの種類が、UIButtonTypeSystemまたは、UIButtonTypeRoundedRectの場合にのみtinColorで塗りつぶしされるようだ。
EZ-NET: iOS 7 では標準ボタンの画像が tintColor で塗りつぶされる : iPhone プログラミング
UITableViewのセル背景色が反映されない
UITableViewCellの背景色は、デフォルトで白?になったようだ。
変更する方法は、tableView:willDisplayCell:forRowAtIndexPath:か、tableView:cellForRowAtIndexPath:のどちらかから、backgroundColorをclearColor(もしくは好きな色)に変更するといい。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = [UIColor clearColor]; }
疲れたのでこのへんで。