Вид UINavigationController и смещение на 20 пунктов - PullRequest
2 голосов
/ 13 февраля 2012

Это уже опубликованный вопрос, но мне нужно понять, что происходит со следующим сценарием.Я разрабатываю приложение для iPad и создал UINavigationController, как показано ниже (в целях тестирования).

UINavigationController* navigationController = [[UINavigationController alloc] init];        
navigationController.view.backgroundColor = [UIColor redColor];

После создания я добавил представление UINavigationController как подпредставление * 1006.*.

[self.view addSubview:navigationController.view];

Результат отображается на следующем изображении:

enter image description here

Как видите, между строкой состояния ипанель навигации UINavigationController.Поскольку вид UINavigationController красный, кажется, что рамка навигационной панели имеет этот пробел.

Я нашел хак для устранения проблемы.Установив рамку для UINavigationController, панель навигации переместится в правильное положение.

CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGRect frameRect = CGRectMake(navigationController.view.frame.origin.x, navigationController.view.frame.origin.y - statusBarFrame.size.height, navigationController.view.frame.size.width, navigationController.view.frame.size.height);

navigationController.view.frame = frameRect;

Теперь, поскольку мне не очень нравится этот хак, и я бы понял, что происходит, сделайтеУ вас есть предложения, чтобы найти элегантное решение для решения проблемы?

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 13 февраля 2012

Это смещение 20 пикселей для строки состояния, контроллер навигации выполнен в полноэкранном режиме, но вы добавляете его в подпредставление основного представления.

1 голос
/ 15 марта 2013

Это исправление, которое действительно решило все проблемы.Так что подумайте о том, чтобы опубликовать его так, как это могло бы быть на самом деле.

Как это работает

Это установит исходную точку моей навигационной панели в 0, и, в свою очередь, представление навигации также будет установлено в 0, что принимаетссылка на панель навигации, которая решает все беспорядок:)

И 44 - высота панели навигации в коде.:)

Введите код в ViewDidAppear,

   CGRect windowFrame = [UIScreen mainScreen].applicationFrame;
   //Setting the Origin to 0 of both Navigation Bar and Navigation View for Both Landscape and Portrait
   if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)){
       [self.navigationController.navigationBar setFrame:CGRectMake(0, 0, windowFrame.size.width, 44)];
        [self.navigationController.view setFrame:CGRectMake(0, 0, windowFrame.size.width, windowFrame.size.height)];
    }
    else{
        [self.navigationController.navigationBar setFrame:CGRectMake(0, 0, windowFrame.size.height, 44)];
        [self.navigationController.view setFrame:CGRectMake(0, 0, windowFrame.size.height, windowFrame.size.width)];
    }
1 голос
/ 14 марта 2013
viewController setWantsFullScreenLayout:YES

Это может помочь вам.

0 голосов
/ 30 апреля 2015
[self setWantsFullScreenLayout:<#(BOOL)#>];

устарело.Если вы хотите добавить подпредставления в свой ViewController, не беспокоясь об использовании NevigationBar:

self.edgesForExtendedLayout = UIRectEdgeNone;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...