UINavigationController перекрывает ModalViewController - PullRequest
0 голосов
/ 13 января 2011

У меня есть приложение, которое проходит через набор экранов в контроллере навигации, затем есть экран с контроллером вкладок, который в одном из представленных представлений хочет отобразить контроллер модального представления, который должен отображаться поверх все приложение (хотя и не во весь экран).

Все работает нормально, но модальное окно частично закрыто сверху навигационным контроллером. Я попытался использовать self / self.tabBarController / self.navigationController / self.tabBarController.navigationController для вызова presentModalViewController, но они либо не работают, либо по-прежнему отображают модальное окно внизу.

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

Есть идеи? Благодарю. (код, скриншоты и видео ниже)

- (IBAction)add:(id)sender {
  // create the view
  AddAttainmentController *addScreen = [[AddAttainmentController alloc] init];
  // pass in a selected pupil
  [addScreen setPupils:[NSMutableArray arrayWithObject:pupil]];
  // add the view to a navigation controller
  UINavigationController *control = [[UINavigationController alloc] initWithRootViewController:addScreen];
  // place the navigation controller on the screen
  [self presentModalViewController:control animated:YES];
  // release at the end
  [control release];
  [addScreen release];
}

Снимки экрана: http://cl.ly/032v2k0t0N1s1m3H0511 (вы можете видеть панель навигации при скользящем модальном окне) http://cl.ly/1h0o453Y3Z051P3S1S37 (панель навигации модального окна закрыта оригиналом)

Видео: http://cl.ly/1e2J3o1q3V1l1j470m12

1 Ответ

1 голос
/ 13 января 2011

Похоже, вы не учли некоторые ограничения и предположения, связанные с использованием классов контроллеров представления Apple, и в результате получаете неопределенное и неожиданное поведение.

Контроллеры панели вкладок всегда должны быть в корне иерархии контроллеров. Из справочника класса:

При развертывании интерфейса панели вкладок вы должны установить это представление в качестве корня вашего окна. В отличие от других контроллеров представления, интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления

Кроме того, предполагается, что модальные контроллеры представления (и все контроллеры представления) заполняют их окно.

...