Я пытаюсь представить контроллер представления модально, с прозрачным фоном. Моя цель - сделать так, чтобы представление текущего и представленного контроллеров представления отображалось одновременно. Проблема в том, что когда представление анимации заканчивается, представление контроллера представления исчезает.
- (IBAction)pushModalViewControllerButtonPressed:(id)sender
{
ModalViewController *modalVC = [[ModalViewController alloc] init];
[self presentViewController:modalVC animated:YES completion:nil];
}
Я знаю, что мог бы просто добавить представление как подпредставление, но я бы хотел по какой-то причине избежать этого решения. Как я мог это исправить?
Ответы:
Этот следующий код работает только на iPad.
Я бы пошел с добавлением подпункта.
Здесь очень хорошая дискуссия. Посмотрите на комментарии конкретно. Не только ответ.
Модальный вид
Если бы я был тобой, я бы этого не делал. Я бы добавил подпункт и сделал бы это. Кажется, это дает мне лучший контроль над вещами.
РЕДАКТИРОВАТЬ:
Как упомянул Пол Линсей, начиная с iOS 8, все, что нужно, -
UIModalPresentationOverFullScreen
это использовать modalPresentationStyle представляемого ViewController. Это будет также охватывать кнопки навигации и вкладки.источник
modalPresentationStyle = UIModalPresentationCurrentContext
на ведущий контроллере представления, а не в представленных одной.ViewController
иерархии вашего представления. (например, aNavigationController
или экземпляр вашего контроллера представления слайд-меню, например).UIModalPresentationCustom
, и только если он установлен прямо перед,presentViewController
а не вviewDidLoad
.modalPresentationStyle
раньшеviewDidLoad
. Я сделал это в конструкторе, и это сработало.Для тех, кто пытается заставить это работать в iOS 8, «одобренный Apple» способ отобразить прозрачный контроллер модального вида - установить
modalPresentationStyle
на текущем контроллере ed значениеUIModalPresentationOverCurrentContext
.Это можно сделать в коде или установив свойства перехода в раскадровке.
Из документации UIViewController:
https://developer.apple.com/documentation/uikit/uiviewcontroller
Видеоролик «Просмотр улучшений контроллера в iOS 8» с WWDC 2014 подробно расскажет об этом.
Примечание:
viewDidLoad
представленном представлении ControlController не окажет никакого влиянияисточник
sourceVC
естьself.navigationController
. Кроме того, только после установки целевого стиля презентации в качестве пользовательского, я мог видеть сквозь него.[sourceVC setModalPresentationStyle:UIModalPresentationCurrentContext];
,[targetVC setModalPresentationStyle:UIModalPresentationCustom];
Надеюсь , это поможет кому - то.presentedVC.modalPresentationStyle = UIModalPresentationOverCurrentContext
в представляя ВК. Не работает в представленном ВК. Поверь мне, я пытался.В iOS 8.0 и выше это можно сделать, установив свойство modalPresentationStyle значение UIModalPresentationOverCurrentContext.
источник
.custom
и.overFullScreen
работает..overFullScreen
текущий контроллер видviewWillAppear
не будет вызываться.presentedController.view.backgroundColor = #color#
должно быть написано вpresentedController
«хviewDidLoad
, или жеpresentedController
» s жизнь прерывается.Этот код отлично работает на iPhone под iOS6 и iOS7:
В этом случае вы пропустите слайд-анимацию. Чтобы сохранить анимацию, вы все равно можете использовать следующее «не элегантное» расширение:
Если наше представление V находится внутри UINavigationController или UITabbarController, вам нужно работать с этими контроллерами как с представлением VC.
Кроме того, в iOS7 вы можете реализовать собственный
UIViewControllerTransitioningDelegate
протокол применения анимации перехода . Конечно, в этом случае вы можете получить прозрачный фонВо-первых, перед представлением вы должны установить
modalPresentationStyle
Затем вы должны реализовать два метода протокола
Последнее, что нужно сделать, это определить свой пользовательский переход в
CustomAnimatedTransitioning
классе.источник
modalPresentationStyle
установлен также!Я немного боролся с Интерфейсным Разработчиком XCode 7, чтобы установить Стиль Представления, как предложил @VenuGopalTewari. В этой версии, кажется, нет режима презентации
Over Current Context
илиOver Full Screen
для segue. Таким образом, чтобы это работало, я установил режимDefault
:с участием
Дополнительно я установил режим представления модально представленного контроллера представления на
Over Full Screen
:источник
Создайте последовательность для модального представления и установите свойство Presentation для этого перехода в текущем контексте, оно будет работать на 100%
источник
PresentViewController с прозрачным фоном - в iOS 8 и iOS 9
А в MYViewController установить черный цвет фона и уменьшить непрозрачность
источник
Это немного странно, но для меня этот код работает (iOS 6):
Этот код работает и на iPhone
источник
Эта категория работала для меня (IOS 7, 8 и 9)
H файл
М файл
источник
Решение этого ответа с использованием Swift будет следующим.
источник
Если вы используете раскадровку, вы можете выполнить этот шаг:
источник
Я добавил эти три строки в методе init в представленном контроллере представления, и он работает как шарм:
РЕДАКТИРОВАТЬ (работает на iOS 9.3):
Согласно документации:
Доступный в iOS 8.0 и позже.
источник
Альтернативный способ - использовать «вид контейнера». Просто сделайте альфа ниже 1 и вставьте с помощью seque. XCode 5, цель iOS7. Проверено на iPhone.
Контейнерный вид доступен с iOS6. Ссылка на пост в блоге об этом.
источник
Я создал объект для обработки представления того, что я называю «наложенным модальным», то есть он сохраняет вид фона и позволяет вам получить модальный с прозрачным фоном.
У него есть один простой метод, который делает это:
Важно установить
modalPresentationCapturesStatusBarAppearance
свойствоYES
и принудительно обновить внешний вид строки состояния, если ваш представленный контроллер представления отличаетсяpreferredStatusBarStyle
.Этот объект должен иметь
@property (assign, nonatommic) isPresenting
Вы хотите , чтобы этот объект соответствует Критериям
UIViewControllerAnimatedTransitioning
иUIViewControllerTransitioningDelegate
протоколов и реализовать следующие методы:и:
При этом выполняется анимация скольжения снизу, имитирующая модальную анимацию по умолчанию, но вы можете сделать ее как угодно.
Важно то, что представление контроллера представления останется сзади, что позволит вам создать прозрачный эффект.
Это решение работает для iOS 7+
источник
Очень простой способ сделать это (используя
Storyboards
, например):Это представит
UIViewController
вStoryboard
модально, но с прозрачным фоном.источник
Работа на iOS 7-10
источник
Подводя итог всем хорошим ответам и комментариям здесь и сохраняя анимацию при переходе на новую,
ViewController
я сделал следующее: (поддерживает iOS 6 и выше)Если вы используете
UINavigationController
\UITabBarController
это путь:Если вы сделаете это, вы потеряете свою
modalTransitionStyle
анимацию. Чтобы решить эту проблему, вы можете легко добавить в свойSomeViewController
класс это:источник
Конечно, вы должны установить UIModalPresentationCurrentContext, но место для установки clearColor также очень важно! Вы не можете установить фон в функции viewDidLoad, установите его до того, как представление загрузилось, как в корневом контроллере представления или в функции инициализации контроллера, который будет представлен!
или
источник
Если вы используете модальный переход, не забудьте установить его в качестве этого изображения (вы можете отключить анимацию, если хотите)
источник
Полный метод протестирован на iOS 7 и iOS 8.
источник
Swift 4.2
источник
в приложении:
у вас первый вид контроллера, откуда вы должны загрузить следующий вид:
в вашем nextViewController, который должен быть добавлен прозрачным:
источник
Нам нужно правильно настроить наш модал.
целевая ссылка на изображение
Во-первых, нам нужно изменить фон View View Controller на Clear color. Это просто означает, что он должен быть прозрачным. По умолчанию этот вид является белым.
Во-вторых, нам нужно выбрать Segue, который ведет к экрану входа в систему, и в инспекторе атрибутов установить презентацию в текущий контекст. Этот параметр доступен только при включенных автоматических макетах и классах размеров.
целевая ссылка на изображение
источник
Установить навигацию
modalPresentationStyle
наUIModalPresentationCustom
и установите цвет фона представленного контроллера представления как чистый цвет.
источник