Xcode 4.0 でアプリケーション (ランドスケープ サポートのみ) を開発し、すべての新しい IOS へのアップグレードに成功しましたが、iOS 7 では、下の画像に示すように、ステータスバーがビューの上にあるトランスラント バーという新しい変更を行っていることがわかっています。
しかし、viewcontrollerbasedstatusappearance パラメータ値を plist で NO に変更し、ウィンドウの原点 x 座標値を 20 ピクセルに変更することで解決しました (x 座標が強制的に横向きで起動する理由)。下の写真に示され、コードはここにあります
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
self.window = [[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
if (DEVICE_IS_IPHONE || DEVICE_IS_IPHONE5)
{
[UIApplication sharedApplication].statusBarHidden=YES;
}
else if(DEVICE_IS_IPAD)
{
[UIApplication sharedApplication].statusBarHidden=NO;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds=YES;
self.window.frame=CGRectMake(self.window.frame.origin.x+20, self.window.frame.origin.y, self.window.frame.size.width-20, self.window.frame.size.height);
}
}
mLoginController = [[LoginViewController alloc]init];
mNavigationController = [[UINavigationController alloc ] initWithRootViewController:mLoginController];
self.window.rootViewController = mNavigationController;
[self.window addSubview:[mNavigationController view]];
[self.window makeKeyAndVisible];
[mLoginController release];
return YES;
}
また、以下に示すビューのloginviewcontrollerでは、loadviewメソッドを使用して以下のようにコントローラービューをオーバーライドしています。参考までに、同じ問題が発生しているにもかかわらず、viewdidloadを直接使用するように変更しました。
-(void)loadView{
CGSize theSize = CGSizeMake(1, 1);
CGRect theFrameRect = [UtilityMethods getAbsoluteFrameForSize:theSize];//i will get the exact
screen size based on device
UIView *theLoginView = [[UIView alloc]initWithFrame:CGRectMake(0, 40, theFrameRect.size.width,
theFrameRect.size.height)];
self.view = theLoginView;
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin;
self.view.backgroundColor = [UIColor blackColor];
}
しかし、横向きに再び回転すると、ステータスバーがビューの上に来て、下の写真に示すようにステータスバーのフレームが下に座っています。ステータスバーのウィンドウ枠。
そのため、できるだけ早く iOS 6 と 7 の両方をサポートするために、これを処理する方法を教えてください。事前に感謝します。