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. Я сделал что-то вроде этого:

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

Я пробовал это с UINavigationController в качестве rootViewController моего окна и различных других пользовательских контроллеров представления. Кажется, что пока rootViewController окна знает, что происходит, любой sub-viewController может вызывать 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.

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

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

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

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

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

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

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

Другие вопросы по тегам