1

AppDelegateクラスでTabBarVCを作成し、[[UIScreenmainScreen]bounds]でウィンドウフレームを設定します。ステータスバーが表示されているので、高さは460であるはずですが、480のように見えます。手動で高さを460に設定すると、タブの下部にタッチ認識がカットされます。以下はコードです

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIColor *brownNavBarColor = [[UIColor alloc] initWithRed:0.78f green:0.56f blue:0.06f alpha:1.0f];
[application setStatusBarHidden:NO];

CGRect windowRect = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame:windowRect];

CGRect appFrame = [[UIScreen mainScreen] applicationFrame];

NSLog(@" appFrame %f", appFrame.origin.y);
NSLog(@" appFrame %f", appFrame.size.height);

NSLog(@" window.frame %f", self.window.frame.origin.y);
NSLog(@" window.frame %f", self.window.frame.size.height);

NSLog(@" window.bounds %f", self.window.bounds.origin.y);
NSLog(@" window.bounds %f", self.window.bounds.size.height);

[self.window makeKeyAndVisible];

self.ingredientTabVC2 = [[NewIngredientViewController alloc] initWithNibName:nil bundle:NULL];
self.ingredientNC2 = [[UINavigationController alloc] initWithRootViewController:self.ingredientTabVC2];
[self.ingredientNC2.navigationBar setTintColor:brownNavBarColor];

self.ingredientTabVC3 = [[IngredientTabViewController alloc] initWithNibName:nil bundle:NULL];
self.ingredientNC3 = [[UINavigationController alloc] initWithRootViewController:self.ingredientTabVC3];
[self.ingredientNC3.navigationBar setTintColor:brownNavBarColor];

self.tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:NULL];
self.tabBarController.viewControllers = [[NSArray alloc] initWithObjects: self.ingredientNC2, self.ingredientNC3, nil];


[self.window setRootViewController:self.tabBarController];
return YES;
}

これにより、ログ出力が得られます

2013-02-12 23:04:21.867 SingleTest[24221:c07]  appFrame 20.000000
2013-02-12 23:04:21.868 SingleTest[24221:c07]  appFrame 460.000000
2013-02-12 23:04:21.869 SingleTest[24221:c07]  window.frame 0.000000
2013-02-12 23:04:21.870 SingleTest[24221:c07]  window.frame 480.000000
2013-02-12 23:04:21.870 SingleTest[24221:c07]  window.bounds 0.000000
2013-02-12 23:04:21.871 SingleTest[24221:c07]  window.bounds 480.000000

誰かがこの違いの背後にある理由を説明できますか?

4

1 に答える 1

8

のドキュメントからUIScreen

applicationFrame:

このプロパティには、画面の境界からステータスバーが表示されている場合は、ステータスバーが占める領域を差し引いたものが含まれます。このプロパティを使用することは、アプリケーションの初期ウィンドウサイズを取得するための推奨される方法です。長方形はポイントで指定されます。

境界:

ポイントで測定された、画面の境界矩形が含まれます。(読み取り専用)

boundsステータスバーが含まれていますが、含まれてapplicationFrameいません。

applicationFramey起源が。であることにも注意してください20

メインウィンドウを画面いっぱいに表示する必要があります。ウィンドウを設定するrootViewControllerと、自動的に調整されapplicationFrameます。

于 2013-02-13T04:11:50.787 に答える