10

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

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

+0

Каков стиль презентации ViewController, из которого вы представляете? – brynbodayle

+0

@bbodayle, у меня такая же проблема, и я пробовал все стили презентации/комбинации на обоих ViewControllers. –

ответ

11

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

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

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

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

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

+1

Что здесь общего? Установка modalTransitionStyle в целевом представлении не имела никакого значения, и ни с помощью presentViewController, ни с помощью currentModalViewController. –

+0

присвоение стиля перехода 'vc' вместо' self' и использование метода 'presentViewController'. Не видя своего раскадровки, трудно диагностировать, не работает ли это. С помощью вышеупомянутого метода ваш наложенный VC должен быть того же размера, что и «self» (или иметь возможность изменения размера). –

+2

Да, в моем проекте оба ViewControllers имеют одинаковый размер. Я пробовал ваш код, и никаких изменений не было. Значение свойства «modalPresentationStyle = UIModalPresentationCurrentContext» должно быть применено к себе здесь, а не vc. Наверное, мне придется начать свой собственный вопрос, вместо того чтобы предлагать щедрость на этом, потому что здесь нет решения, хотя оно отмечено как одно. –

25

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

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

+1

Это сработало для меня. Ключ устанавливал modalPresentationStyle на представлении контроллера представления, а не на контроллер представления. –

+0

Что делать, если вы представляете его на UISplitViewController? –

+0

Спасибо за это! –

0

г T работали почти полностью, вы просто потеряете анимацию перехода на представленных ViewController

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^