Ich habe eine UIViewController
Ansicht als Unteransicht / Modal über einer anderen UIViewController
Ansicht, z. B. dass die Unteransicht / das Modal transparent sein sollte und alle Komponenten, die der Unteransicht hinzugefügt werden, sichtbar sein sollten. Das Problem ist, dass ich habe, dass die Unteransicht schwarzen Hintergrund zeigt, um clearColor zu haben. Ich versuche UIView
als clearColor nicht schwarzen Hintergrund zu machen. Weiß jemand, was daran falsch ist? Jeder Vorschlag geschätzt.
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];
}
BEHOBEN : Ich habe die Probleme behoben. Es funktioniert so gut für iPhone und iPad. Modal View Controller ohne schwarzen Hintergrund, nur clearColor / transparent. Das einzige , was ich ändern muß , ist I ersetzt UIModalPresentationFullScreen
zu UIModalPresentationCurrentContext
. Wie einfach ist das!
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];
HINWEIS: Wenn Sie eine modalPresentationStyle
Eigenschaft von verwenden 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];
HINWEIS: Die schlechte Nachricht ist, dass die oben genannte Lösung unter iOS 7 nicht funktioniert. Die gute Nachricht ist, dass ich das Problem für iOS7 behoben habe! Ich habe jemanden um Hilfe gebeten und hier ist, was er sagte:
Wenn ein Ansichts-Controller modal dargestellt wird, entfernt iOS die darunter liegenden Ansichts-Controller für die Dauer der Darstellung aus der Ansichtshierarchie. Während die Ansicht Ihres modal dargestellten Ansichts-Controllers transparent ist, befindet sich nichts darunter außer dem schwarzen App-Fenster. iOS 7 führte einen neuen modalen Präsentationsstil ein UIModalPresentationCustom
, der bewirkt, dass iOS die Ansichten unter dem Controller für präsentierte Ansichten nicht entfernt. Um diesen modalen Präsentationsstil verwenden zu können, müssen Sie jedoch Ihren eigenen Übergangsdelegierten bereitstellen, um die Präsentation zu verwalten und Animationen zu schließen. Dies wird im Vortrag "Benutzerdefinierte Übergänge mit View Controllern" von WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 beschrieben, in dem auch erläutert wird, wie Sie Ihren eigenen Übergangsdelegierten implementieren.
Möglicherweise sehen Sie meine Lösung für das oben genannte Problem in iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
quelle
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
wird das Problem lösen,Antworten:
iOS8 +
In iOS8 + können Sie jetzt den neuen modalPresentationStyle UIModalPresentationOverCurrentContext verwenden, um einen Ansichtscontroller mit transparentem Hintergrund darzustellen:
quelle
[self presentViewController:modalViewController animated:YES completion:nil];
? (anstelle von targetController)?BEHOBEN : Ich habe die Probleme behoben. Es funktioniert so gut für iPhone und iPad. Modal View Controller ohne schwarzen Hintergrund, nur clearColor / transparent. Das einzige, was ich ändern muss, ist, dass ich UIModalPresentationFullScreen durch UIModalPresentationCurrentContext ersetzt habe. Wie einfach ist das!
FirstViewController.m
HINWEIS: Wenn Sie eine modalPresentationStyle-Eigenschaft von navigationController verwenden:
FirstViewController.m
HINWEIS: Die schlechte Nachricht ist, dass die oben genannte Lösung unter iOS 7 nicht funktioniert. Die gute Nachricht ist, dass ich das Problem für iOS7 behoben habe! Ich habe jemanden um Hilfe gebeten und hier ist, was er sagte:
Wenn ein Ansichts-Controller modal dargestellt wird, entfernt iOS die darunter liegenden Ansichts-Controller für die Dauer der Darstellung aus der Ansichtshierarchie. Während die Ansicht Ihres modal dargestellten Ansichts-Controllers transparent ist, befindet sich nichts darunter außer dem schwarzen App-Fenster. iOS 7 führte mit UIModalPresentationCustom einen neuen modalen Präsentationsstil ein, der bewirkt, dass iOS die Ansichten unter dem präsentierten Ansichts-Controller nicht entfernt. Um diesen modalen Präsentationsstil verwenden zu können, müssen Sie jedoch Ihren eigenen Übergangsdelegierten bereitstellen, um die Präsentation zu verwalten und Animationen zu schließen. Dies wird im Vortrag "Benutzerdefinierte Übergänge mit View Controllern" von WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 beschrieben, in dem auch erläutert wird, wie Sie Ihren eigenen Übergangsdelegierten implementieren.
Möglicherweise sehen Sie meine Lösung für das oben genannte Problem in iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
quelle
self.modalPresentationStyle = UIModalPresentationCurrentContext;
geschafft.self.modalPresentationStyle = UIModalPresentationFullScreen; [self performSegueWithIdentifier:@"CustomSegue" sender:self];
Für rein visuelle Denker und Storyboard-Fans gibt es also folgende Möglichkeiten:
1. Präsentieren des View Controllers
2. Präsentierter View Controller
quelle
Swift 3 & iOS10 Lösung:
quelle
Dies ist aus xCode 7 Beta 4 unter Verwendung eines Steuer-Drag-Segues. Stellen Sie einfach den Hintergrund Ihres Ziels ein, um ihn zu löschen, und legen Sie die Segue-Eigenschaften in IB wie folgt fest (nb. Die Präsentation kann auch "Über Vollbild" sein):
quelle
Ich fand, dass der einfachste Weg, es unter iOS7 und iOS8 zum Laufen zu bringen, darin besteht, den Präsentationsstil auf dem modallyPresentedVC (ViewController, den Sie modal präsentieren möchten) aufgrund von iOS8 auf UIModalPresentationOverCurrentContext zu setzen:
und UIModalPresentationCurrentContext zum Präsentieren von VC (dem Controller, der das modallyPresented präsentiert) aufgrund von iOS7:
Weil die Dinge unter iOS7 und iOS8 anders gehandhabt werden. Natürlich müssen Sie die Eigenschaften von navigationController nicht festlegen, wenn Sie keine verwenden. Hoffentlich hilft das.
quelle
Swift2-Version:
quelle
Ein anderer Weg (keine Notwendigkeit, einen benutzerdefinierten Übergang zu erstellen und funktioniert unter iOS 7)
Verwenden von Storyboard:
Erstellen Sie den untergeordneten Ansichts-Controller mit der Größe "Freiheit", setzen Sie die Ansichtsbreite beispielsweise auf 500 x 500 und fügen Sie die nächste Methode hinzu:
Erstellen Sie dann einen Modal Segue mit Form Sheet und testen Sie ihn.
quelle
iOS 7-Lösung mit benutzerdefiniertem Übergang:
Lösung basierend auf Hightech-Code.
quelle
Für mich funktioniert das:
MMPushNotificationViewController
ist der Transparent View Controller und ich habe auch dieMMPushNotificationViewController
Ansichtsfarbe als Klarfarbe gemacht. Jetzt alles was ich getan und meinen Transparentviewcontroller gemacht habe.quelle
Für iOS7
Es gibt jetzt eine Möglichkeit, dies mithilfe der benutzerdefinierten iOS7-Übergänge zu erreichen:
Um Ihren benutzerdefinierten Übergang zu erstellen, benötigen Sie zwei Dinge:
<UIViewControllerTransitionDelegate>
)<UIViewControllerAnimatedTransitioning>
)Weitere Informationen zu benutzerdefinierten Übergängen finden Sie in diesem Lernprogramm .
quelle
Funktioniert hervorragend unter iOS7 und iOS8
quelle
Sie können das Fenster auch erneut zur Ansicht hinzufügen.
Auf diese Weise kann die Präsentation animiert werden.
quelle
Für iOS 7 und nur mit Interface Builder kann dies erreicht werden, indem die Präsentation auf allen an der modalen Präsentation beteiligten View-Controllern auf "Over Current Context" gesetzt wird. Auch für Navigationssteuerungen.
Stellen Sie es beispielsweise auf allen diesen Ansichts-Controllern ein:
NavController -> RootViewController -> ModalViewController
quelle
Ich habe nicht viel mit dem Storyboard / Interface Builder herumgespielt, aber was mir auffällt, ist, dass Sie der Ansicht sagen, dass sie klar gefärbt ist (dh 100% Alpha / Durchsichtig) und dass sie auch undurchsichtig ist ( 0% Alpha - vollständig fest). Diese beiden Dinge scheinen nicht ineinander zu greifen. Ich würde die
self.view.opaque = YES;
Zeile auskommentieren und sehen, ob es dann funktioniert;)Ah, etwas anderes, an das ich gerade gedacht habe - es ist durchaus möglich, dass Ihr View Controller den Alpha-Hintergrund hat, aber natürlich wird das Alpha bis zur Farbe des Basisfensters oder des Root View Controllers des Programms durchscheinen, das von ist Standard schwarz. Die Grundschicht Ihrer gesamten App kann keinen transparenten Hintergrund haben - transparent für was? Was steckt dahinter? Es muss etwas geben, um durch die Transparenz zu sehen. Ist das sinnvoll?
quelle
Verwenden Sie einfach "self.modalPresentationStyle = UIModalPresentationCurrentContext;", um die Ansicht zu präsentieren
Wird gut funktionieren :)
quelle