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