Я нахожусь в процессе внесения некоторых изменений в приложение, в том числе переход на интерфейс на основе навигации. В рамках этого изменения я написал контроллер представления, который содержит UINavigationController
. Проблема в том, что по какой-то странной причине UINavigationBar
и UIToolbar
, управляемые UINavigationController
, смещены на 20px вниз от того места, где они должны быть. Мне удалось создать следующий пример, демонстрирующий проблему:
// MyAppDelegate.m
@implementation MyAppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.frame = [[UIScreen mainScreen] applicationFrame];
[self.window makeKeyAndVisible];
TestController* tc = [TestController new];
[self.window addSubview:tc.view];
return YES;
}
@end
// TestController.m
@implementation TestController
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:CGRectZero];
UINavigationController* navController = [UINavigationController new];
navController.view.backgroundColor = [UIColor blueColor];
[navController setToolbarHidden:NO animated:NO];
[self.view addSubview:navController.view];
}
@end
Это дает следующий результат на моей машине:
![Shot of example](https://i.stack.imgur.com/Ta5JL.png)
Как вы можете видеть, элементы управления на 20px ниже того уровня, на котором я их ожидал. Я попробовал почти все, что я могу придумать (различные комбинации wantsFullScreenLayout
, autoresizesSubviews
и т. Д.) Без положительного эффекта. Это также не имеет ничего общего с программной ошибкой в строке состояния (как, по-видимому, имеет место в большинстве других примеров, с которыми я сталкивался), поскольку я ни в коем случае не связываюсь со строкой состояния. Это происходит с или без корневого контроллера представления в навигационном контроллере - если он есть, его содержимое также смещается на 20 пикселей вниз (поэтому они фактически находятся в правильном месте относительно панели навигации и панели инструментов).
Любая помощь высоко ценится!
РЕДАКТИРОВАТЬ: После небольшого исследования кажется, что удаление строки self.window.frame = [[UIScreen mainScreen] applicationFrame];
, кажется, исправляет положение панели навигации, панели инструментов и содержимого. Тем не менее, теперь некоторые другие представления в приложении находятся не в том месте (вверху строки состояния). Насколько я понимаю, что строка обычно рекомендуется, чтобы убедиться, что окно имеет правильный размер?