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

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

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 означает, что я могу представить это представление прозрачным фоном и увидеть другое мое мнение за новым. Однако это мешает мне представить его с переходом.

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

Ответ 1

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

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

Попробуйте следующее:

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

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

Ответ 2

Я смог выполнить это, установив modalPresentationStyle = UIModalPresentationCurrentContext на rootViewController моего UIWindow, ЕСЛИ я не представил никаких новых полноэкранных представленийКонтроллеры поверх этого rootViewController. Я сделал что-то вроде этого:

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 в new-UIViewController.

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

Ответ 3

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

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

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

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

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

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