Ho una UIViewController
vista come sottoview / modale sopra un'altra UIViewController
vista, come quella che la subview / modale dovrebbe essere trasparente e qualsiasi componente aggiunto alla sottoview dovrebbe essere visibile. Il problema è che la vista secondaria mostra uno sfondo nero invece di avere clearColor. Sto provando a fare UIView
come sfondo ClearColor non nero. Qualcuno sa cosa c'è che non va? Qualche suggerimento apprezzato.
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];
}
RISOLTO : ho risolto i problemi. Funziona così bene sia per iPhone che per iPad. Modal View Controller senza sfondo nero solo chiaroColore / trasparente. L'unica cosa che ho bisogno di cambiamento è ho sostituito UIModalPresentationFullScreen
a UIModalPresentationCurrentContext
. Quanto è semplice!
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];
AVVISO: se si utilizza una modalPresentationStyle
proprietà di 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];
AVVISO: la cattiva notizia è che la soluzione di cui sopra non funziona su iOS 7. La buona notizia è che ho risolto il problema per iOS7! Ho chiesto aiuto a qualcuno ed ecco cosa ha detto:
Quando si presenta un controller di visualizzazione in modo modale, iOS rimuove i controller di visualizzazione sottostanti dalla gerarchia di visualizzazione per la durata in cui viene presentato. Mentre la vista del controller della vista presentato in modo modale è trasparente, non c'è nulla al di sotto di essa tranne la finestra dell'app, che è nera. iOS 7 ha introdotto un nuovo stile di presentazione modale UIModalPresentationCustom
, che impedisce a iOS di rimuovere le visualizzazioni sotto il controller di visualizzazione presentato. Tuttavia, per utilizzare questo stile di presentazione modale, è necessario fornire il proprio delegato di transizione per gestire la presentazione e chiudere le animazioni. Questo è delineato nel discorso "Transizioni personalizzate usando i controller di visualizzazione" del WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 che illustra anche come implementare il proprio delegato di transizione.
Puoi vedere la mia soluzione per il problema sopra in iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
risolverà il problema,