Schwarzer Bildschirm nach Vorlage modal-view-controller, die im aktuellen Kontext von UITabBarController
Mein root-view-controller ist ein UITabBarController. Ich werde versuchen, eine modale view controller werden über die tab-bar-controller view-Controller, aber immer noch erlauben, die tab-Leiste verwendet werden, um gehen Sie zu einem anderen Reiter - in anderen Worten, ich möchte für das modal nur dann unterbrechen, um den Fluss der jeweiligen Registerkarte, nicht die ganze app.
Um dies zu tun, habe ich die Präsentation view-controller presentation-Stil als "Over Current Context" in den storyboard. Das problem das ich habe ist, dass nach der Präsentation des modal-view-controller und wählen Sie eine neue Registerkarte, die Darstellung view controller ist der Ansicht, entfernt vom Fenster, und ist nicht wieder Hinzugefügt, um das Fenster beim schließen des vorgestellten view-controller. Nach dem schließen des view-Controllers verschieben auf einen anderen tab und dann wieder zurück, schließlich stellt die Darstellung view controller wieder in das Fenster.
Habe ich wiedergegeben meine problem mit dem 'Tabbed' template in Xcode.
Nach der Präsentation von modal - ich habe mehr Transparenz, um die vorgestellten view-controller leicht sehen, was Los ist in der vorgestellten view-controller.
Wechsel zum zweiten tab und dann wieder zurück - die Darstellung view controller ist der Ansicht, der nun behoben wurde.
Abberufung des modal Blätter der Darstellung view controller mit der view immer noch entfernt vom Fenster. Gehen Sie zur Registerkarte 2 und zurück fügt der Blick zurück zum Fenster.
Ich hoffe das ist etwas einfacher, ich habe übersehen, im storyboard, sondern die Tatsache, dass ich präsentieren kann, die modal-und sehen die vorgestellten view-controller dahinter, vor dem ändern der tabs macht mich denken, dass ich die Dinge richtig eingestellt.
- Können Sie erklären, warum Sie wollen also diesem? Normalerweise, eine modale view controller in diesem Zusammenhang verwendet werden würde, um eine bestimmte Aktion ausführen auf die Registerkarte bezieht, und sollten entlassen werden, während immer noch in den tab. Wenn Sie wirklich brauchen, dass die Ansicht (die Modal-Vorlage) bleiben sichtbar, die Sie möglicherweise verwenden möchten, ein navigation-controller als root für das tab, und drücken statt.
- Poste bitte den code, den Sie verwenden, zu präsentieren sowie zu entlassen, der modale viewController
- Es ist eine Aktion ausführen, auf die Registerkarte bezieht, genau so, wie Sie erwähnt haben. Jede Registerkarte ist einem separaten work-flow - modalen unterbricht den Arbeitsablauf auf der Registerkarte, aber seine völlig in Ordnung für den Benutzer auf einen anderen tab und anzeigen von Informationen in keinem Zusammenhang zu der Registerkarte mit dem modal.
- dargestellt durch ein storyboard modal-segue. Seine nur abgetan mit
[self dismissViewControllerAnimated:true completion:nil]
- Versuchen Sie, die segue-trigger aus dem storyboard, und rufen Sie es von code statt.
- Hast du Lösung gefunden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem und konnte es lösen, indem Sie die Einstellung
self.definesPresentationContext = YES;
auf der Darstellung view controller vor der Darstellung des modal VC. Sie können auch festlegen, diese in einem storyboard, das Kontrollkästchen "genannt wird, Definiert den Kontext" im Interface Builder.iOS 10+ & Swift 3+
Habe ich sehr schöne Lösung für dieses problem. Verwenden Sie, über den vollen Bildschirm modalen Präsentation Stil für einen view-controller, präsentiert.
Über den gesamten Bildschirm, wird der view controller über Ihre tabbar (controller) durch abdecken. Also, der end-Benutzer kann nicht schalten tabbar (es sei denn, Sie führen den Betrieb, programmgesteuert) tabbar-Elemente. Benutzer müssen in der Nähe dieser view-controller zu wechseln tabbar.
Wenn Sie mit segue, zu präsentieren view-controller und wählen Sie dann "Über den ganzen Bildschirm' aus modal Darstellung im Attribut Inspektion
Versuchen Sie, Ihre Präsentation Stil, wie Das "Full Screen" statt "Over Current Context" in den storyboard.
Versuchen präsentieren den view-controller-Anwendung Fenster. Ich hatte ein ähnliches problem wurde behoben, durch folgenden code:
Hoffe, dies hilft Ihnen auch.
Ich reproduziert das problem und eine Lösung gefunden.
Es beinhaltet nicht die änderung der segue-Methode oder das ändern einige Attribute in das storyboard.
Vorschlag:
Aber bevor wir zu der Lösung, die ich möchte hinzufügen, dass der Zweck des Modal präsentiert viewcontrollers ist distrupt den tatsächlichen Ablauf der app und einige zusätzliche kontextuelle Informationen oder einige verwertbare Inhalte für die Präsentation vc. Einfach ausgedrückt: es ist sehr logisch und tatsächlich empfohlen, zur Abdeckung der tab-Leiste bei der Vorstellung einer view-controller Modal. Es gibt viele gute Beispiele dafür in den app store.
Having said, die hier ist eine Lösung, die ich vorschlagen.
Lösung:
Ich glaube das problem liegt in der Art und Weise UITabBarController Griffen, seine Sicht der Hierarchie.
Was ich Tat, war ausdrücklich entlassen, der Modal vorgestellt view-controller, bevor Sie die tab geändert wurde. Das machte die Präsentation view-controller bestehen in der view-Hierarchie der UITabBarViewController vor der tab-Leiste wechselt zum neuen tab.
In der "viewWillDisappear" - Methode des Modal präsentiert ViewController hinzufügen.
hatte ich dieses problem : wenn ich meine ModalController es dauert transparenten hintergrund und wenn ich änderte das tab zum nächsten in einer tabBarController und getBack zum vorherigen transparenten hintergrund war Weg und es ist eine schlechte schwarze hintergrund nach recherche fand ich den Punkt, der Punkt ist:
selbst.definesPresentationContext = true
das selbst ist nicht-modal controller selbst ist, der präsentiert controller für modalController und noch ein Punkt ist .overCurrentContext wie diese
** self.definesPresentationContext = true **
modalController.modalPresentationStyle = .overCurrentContext
self.present(modalController, animated: true, completion: nil)
Haben ein ähnliches Problem mit meiner tab-controller, aber wie die Kommentare, ich schlage vor, die änderung der überleitung um eine push-oder eine show segue. Dies ermöglicht es, die Registerkarte zu bleiben, im Takt mit der neuen Ansicht an die Stelle der alten Ansicht, wenn Sie den Wechsel zu anderen tabs. Wenn ästhetik ist ein Thema, können Sie eine benutzerdefinierte navigation-controller zum anpassen der Darstellung der neuen Ansicht.
Gleiche problem habe ich im Leben momentan swift-Projekt. Ich habe Abhilfe auf.
Dann endlich habe ich verwendet
NSNotificationCenter
und entlassen, dass view-controller bei der Registerkarte wird geändert, um dieses problem zu lösen.Habe ich verwiesen tabbar-controller in
AppDelegate
und legen Sie delegieren es.Und es ist Delegierter
Dann muss ich hinzufügen Beobachter in meinem vorgestellten view-controller als
Und es funktioniert gut für mich. Nicht eine richtige Lösung denke ich entlassen view-controller auf der Registerkarte change-Ereignis, aber es ist ok, zu entlassen, anstatt schwarzen Bildschirm, der bricht auch die navigation, die Zeit.