UIModalPresentationCurrentContext с переходом?

Я пытаюсь модально представить контроллер вида, как показано ниже:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:vc animated:YES];

теперь с помощью UIModalPresentationCurrentContext означает, что я могу представить это представление с прозрачным фоном и увидеть мое другое представление за новым. Однако это мешает мне представить его с переходом.

любые идеи, почему? Или как я могу обойти это? Спасибо.

3 ответов


полноэкранные модалы не должны позволять вам видеть нижний слой. Раздражает, я знаю.

из вашего кода я предполагаю, что" addPopover " на самом деле является полноэкранным представлением, где у вас есть контент в качестве подраздела, а остальное прозрачно.

попробуйте это:

vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:vc animated:YES completion:NULL];

примечание: Я бы рекомендовал добавить низкий Альфа-цвет фона, чтобы пользователь знал, что они не могут взаимодействовать с остальной частью представления, когда вы поп это сверху...


я смог сделать это, установив modalPresentationStyle = UIModalPresentationCurrentContext на rootViewController моего UIWindow, если я не представил никаких новых полноэкранных viewControllers поверх этого rootViewController. Я сделал что-то вроде этого:--8-->

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

Я пробовал это как с UINavigationController в качестве rootViewController моего окна, так и с другими контроллерами пользовательских представлений. Кажется, пока rootViewController окна знает, что происходит, любые суб-viewControllers могут вызывать presentViewController:animated:completion: без затемнения основного вида.

однако, предположим, вы представляете другой viewController поверх rootViewController вашего окна. И этот новый viewController представлен с modalPresentationStyle = UIModalPresentationFullScreen (т. е. занимает экран), то вы должны позвонить modalPresentationStyle = UIModalPresentationCurrentContext на этом самом верхнем viewController.

в итоге:

  • если у вас есть UINavigationController - > UIViewController (s) (они могут быть нажаты и выскочили и вышли), то вы установите modalPresentationStyle = UIModalPresentationCurrentContext на UINavigationController.
  • если у вас есть UINavigationController - > UIViewController - > new-UIViewController (с modalPresentationStyle установлен в UIModalPresentationFullScreen), то вы установите modalPresentationStyle = UIModalPresentationCurrentContext на новом-UIViewController.

надеюсь, это работает и для вас, ребята!


предложения г-на Т работали почти идеально, вы просто теряете анимацию перехода на представленном viewcontroller

поскольку он также устанавливает стиль презентации appDelegates rootviewController, он также удалит анимации перехода для любых представлений, представленных с этой точки.

мое исправление состояло в том, чтобы вернуть стиль презентации AppDelegates rootViewController обратно к его умолчанию всякий раз, когда viewcontroller закрыт, что мне нужен прозрачный на фоне

У меня есть кнопка, которая отклоняет presentedViewController, в которой я также устанавливаю стиль презентации rootViewController по умолчанию, используя:

    UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen;

Я надеюсь, что это поможет кому-то еще запутаться в этой проблеме.