У меня есть UIViewController
представление как подпредставление / модал поверх другого UIViewController
представления, например, что подпредставление / модал должно быть прозрачным, и все компоненты, добавленные в подпредставление, должны быть видимыми. Проблема в том, что у меня есть подпредставление показывает черный фон вместо того, чтобы иметь clearColor. Я пытаюсь сделать UIView
как clearColor не черный фон. Кто-нибудь знает, что с ним не так? Любое предложение приветствуется.
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
РЕШЕНО : Я исправил проблемы. Это работает так хорошо для iPhone и iPad. Модальный View Controller без черного фона просто прозрачный / прозрачный. Единственное, что мне нужно изменить, я заменил UIModalPresentationFullScreen
на UIModalPresentationCurrentContext
. Как это просто!
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
ВНИМАНИЕ: Если вы используете modalPresentationStyle
свойство navigationController
:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
ЗАМЕЧАНИЕ. Плохая новость заключается в том, что вышеуказанное решение не работает на iOS 7. Хорошая новость заключается в том, что я исправил проблему с iOS7! Я попросил кого-то о помощи, и вот что он сказал:
Представляя контроллер представления модально, iOS удаляет контроллеры представления под ним из иерархии представления на время, которое это представлено. Хотя вид вашего модально представленного контроллера представления прозрачен, под ним нет ничего, кроме окна приложения, которое является черным. iOS 7 представила новый модальный стиль представления UIModalPresentationCustom
, который заставляет iOS не удалять представления под представленным контроллером представления. Однако, чтобы использовать этот модальный стиль презентации, вы должны предоставить свой собственный делегат перехода для обработки презентации и отклонения анимации. Это изложено в докладе «Пользовательские переходы с использованием контроллеров представления» из WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218, в котором также описывается, как реализовать свой собственный делегат перехода.
Вы можете увидеть мое решение для указанной выше проблемы в iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
решит проблему,