У меня есть представление UIViewController
как subview/modal поверх другого представления UIViewController
, например, что subview/modal должен быть прозрачным и любые компоненты, добавленные в subview, должны быть видимыми. Проблема в том, что у меня есть subview, на черном фоне вместо 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];
}
RESOLVED. Я исправил проблемы. Он работает так хорошо для iPhone и iPad. Modal View Controller без черного фона просто clearColor/transparent. Единственное, что мне нужно изменить - заменить 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