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;
Я надеюсь, что это поможет кому-то еще столкнуться с этой проблемой.