2013-02-13 3 views
1

Я создаю TabBar VC в классе AppDelegate, устанавливая рамку окна с помощью [[UIScreen mainScreen] границ]. Так как у меня отображается строка состояния, высота должна быть 460, но она кажется равной 480. Если я установил высоту вручную 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 

Может кто-то объяснить причину этой разницы?

+0

in ios status bar frame height is 20 – NANNAV

ответ

8

Из документов для UIScreen:

applicationFrame:

Это свойство содержит экранные границы минус площадь, занимаемую в строке состояния, если она видна. Использование этого свойства - рекомендуемый способ получить начальный размер окна вашего приложения. Прямоугольник указан в точках.

оценки:

содержит ограничивающий прямоугольник экрана, измеряется в точках. (только для чтения)

bounds содержит строку состояния, applicationFrame нет.

Обратите внимание, что applicationFrame имеет y происхождение 20.

Вы хотите, чтобы главное окно заполнило экран. Когда вы установите rootViewController, оно будет автоматически изменено на applicationFrame.

+0

Итак, он помещает рамку приложения внутри окна и подходит к корневому контроллеру для приложения-рамки? – user2066978

+0

Да, это правильно. – rmaddy

+0

спасибо, что очищает вещи. – user2066978