最近、アプリのローテーションのサポートを追加していますが、それは苦痛です。かなり一貫して煩わしいと感じていることの1つは、横向きモードと縦向きモードの間で回転するたびに、ビューの1つが約50ピクセルほどシフトアップすることです。
私のランドスケープモードは実際には同じビューコントローラではありません。回転するときにビューコントローラを押します。ただし、後ろに回転すると、ポートレートのview.boundsをリセットする必要があります。そうしないと、ビューが上にシフトしてしまいます。
したがって、ローテーションコードでは、次のことを行う必要があります。
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
UIInterfaceOrientation toOrientation = self.interfaceOrientation;
if ( self.tabBarController.view.subviews.count >= 2 )
{
if(toOrientation == UIInterfaceOrientationPortrait)
{
self.tabBarController.tabBar.hidden = NO;
self.navigationController.navigationBar.hidden = NO;
CGFloat height = [[UIScreen mainScreen] bounds].size.height;
CGFloat width = [[UIScreen mainScreen] bounds].size.width;
self.view.bounds = CGRectMake(0, -55, width, height);
}
}
}
確かにこれは正しくありえません。私のアプリには、ナビゲーションバーと標準のステータスバー(バットライフ、レセプションなど)がアプリの上部にあります。しかし...y座標の原点を負に設定しない限り、ビューが上にずれすぎているようです(これは意味がありません!)。
何が起こっていますか?