Ich zeige eine modale Ansicht mit
[self presentModalViewController:controller animated:YES];
Wenn die Ansicht den Bildschirm nach oben bewegt, ist sie gemäß der Einstellung in der XIB-Datei, aus der sie erstellt wurde, transparent. Sobald sie den Bildschirm ausfüllt, wird sie undurchsichtig.
Gibt es überhaupt eine Möglichkeit, die Ansicht transparent zu halten?
Ich vermute, dass die Ansicht, über die es gelegt wird, nicht gerendert wird, sondern dass die modale Ansicht undurchsichtig wird.
ios
iphone
uiviewcontroller
Darryl Braaten
quelle
quelle
viewcontroller.modalPresentationStyle = .FormSheet
Antworten:
Ihre Ansicht ist immer noch transparent, aber sobald sich Ihr modaler Controller oben im Stapel befindet, wird die Ansicht dahinter ausgeblendet (wie dies bei jedem obersten Ansichtscontroller der Fall ist). Die Lösung besteht darin, eine Ansicht selbst manuell zu animieren. dann wird der Behind-ViewController nicht ausgeblendet (da Sie ihn nicht "verlassen" haben).
quelle
Nach iOS 3.2 gibt es eine Methode, um dies ohne „Tricks“ zu tun - siehe die Dokumentation zur modalPresentationStyle-Eigenschaft . Sie haben einen rootViewController, der den viewController anzeigt. Hier ist der Code zum Erfolg:
Bei dieser Methode ist der Hintergrund des viewControllers transparent und der zugrunde liegende rootViewController ist sichtbar. Bitte beachten Sie, dass dies nur auf dem iPad zu funktionieren scheint, siehe Kommentare unten.
quelle
Over Current Context
als Präsentationsstil verwenden.Was ich brauchte, um das zum Laufen zu bringen:
quelle
modalPresentationStyle
auf dem präsentierenden Ansichts-Controller einstellen (anstatt auf dem des FenstersrootViewController
).Für diejenigen, die Code sehen möchten, habe ich Folgendes zum Controller meiner transparenten Ansicht hinzugefügt:
quelle
Die von Apple genehmigte Methode, dies in iOS 8 zu tun, besteht darin, den modalPresentationStyle auf 'UIModalPresentationOverCurrentContext' zu setzen.
Aus der UIViewController-Dokumentation:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/
Das Video "View Controller Advancements in iOS 8" von WWDC 2014 geht ausführlich darauf ein.
Stellen Sie sicher, dass Ihr dargestellter Ansichts-Controller eine klare Hintergrundfarbe hat (andernfalls erscheint er immer noch undurchsichtig).
quelle
Es gibt noch eine andere Option: Machen Sie vor dem Anzeigen des Modal Controllers einen Screenshot des gesamten Fensters. Fügen Sie das aufgenommene Bild in eine UIImageView ein und fügen Sie die Bildansicht der Ansicht des Controllers hinzu, die Sie anzeigen möchten. Dann zurück senden. Fügen Sie eine weitere Ansicht über der Bildansicht ein (Hintergrund schwarz, Alpha 0,7). Zeigen Sie Ihren Modal Controller und es sieht so aus, als wäre er transparent. Ich habe es gerade auf dem iPhone 4 mit iOS 4.3.1 versucht. Wie Charme.
quelle
Das ist ziemlich alt, aber ich habe das gleiche Problem wie folgt gelöst: Da ich einen Navigationscontroller auf dem iPhone präsentieren muss, war das Hinzufügen einer Unteransicht keine praktikable Lösung.
Also, was ich getan habe:
1) Machen Sie vor der Präsentation des View Controllers einen Screenshot Ihres aktuellen Bildschirms:
2) Erstellen Sie den Ansichts-Controller, den Sie präsentieren möchten, und fügen Sie den Hintergrund als Unteransicht hinzu, um ihn an zurück zu senden.
3) Präsentieren Sie Ihren Ansichts-Controller, aber fügen Sie zuvor im neuen Ansichts-Controller eine transparente Ansicht in viewDidLoad hinzu (ich habe ILTranslucentView verwendet).
Und das ist alles!
quelle
Ich habe meine Erkenntnisse dazu in einer anderen Frage niedergeschrieben , aber das Wesentliche ist, dass Sie sich
modalPresentationStyle = UIModalPresentationCurrentContext
an alles wenden müssen, was im Moment den Vollbildmodus besitzt. Meistens ist es der rootViewController von [UIApplication sharedApplication] .delegate.window. Es könnte sich auch um einen neuen UIViewController handeln, der vorgestellt wurdemodalPresentationStyle = UIModalPresentationFullScreen
.Bitte lesen Sie meinen anderen viel detaillierteren Beitrag, wenn Sie sich fragen, wie ich dieses Problem speziell gelöst habe. Viel Glück!
quelle
Dies scheint in IOS 8 fehlerhaft zu sein. Ich verwende einen Navigationscontroller und der angezeigte Kontext ist der Kontext der Navigationsmenüs, in unserem Fall ein verschiebbarer Menücontroller.
Wir verwenden den Pod 'TWTSideMenuViewController'. '0.3' hat noch nicht überprüft, ob dies ein Problem mit der Bibliothek oder der oben beschriebenen Methode ist.
quelle
Dies hat bei iOS 8-9 funktioniert:
1- Stellen Sie den Hintergrund Ihres View Controllers mit einem Alpha ein
2- Fügen Sie diesen Code hinzu:
quelle
Ich weiß, das ist eine ziemlich alte Frage. Ich war in dieser Angelegenheit festgefahren und konnte einen Hinweis von diesem Thread bekommen. Also hier setzen, wie ich es geschafft habe :). Ich verwende ein Storyboard und bin zum ViewController übergegangen, der vorgestellt werden soll. Der View Controller hat eine transparente Hintergrundfarbe. Jetzt habe ich im Attributinspektor des Segues die Präsentation auf "Über aktuellen Kontext" gesetzt. Und es hat bei mir funktioniert. Ich entwickle für das iPhone.
quelle
Ich habe die offene Soruce-Bibliothek MZFormSheetController erstellt , um das modale Formularblatt auf einem zusätzlichen UIWindow zu präsentieren. Sie können es verwenden, um den modalen Ansichts-Controller für Transparenz darzustellen und sogar die Größe des dargestellten Ansichts-Controllers anzupassen.
quelle
In meinem Zustand habe ich Blick auf den gleichen viewController. Erstellen Sie also einen neuen Ansichts-Controller zum Halten von UIView. Machen Sie diese Ansicht transparent, indem Sie die Alpha-Eigenschaft festlegen. Dann auf einen Knopfdruck habe ich diesen Code geschrieben. Es sieht gut aus.
Und es zeigt, was ich will. hoffe es hilft jemandem.
quelle
Hier ist eine Kategorie, die ich erstellt habe, um das Problem zu lösen.
quelle
Nach vielen Recherchen wird dies unser Problem lösen und unseren Zweck erfüllen.
Erstellen Sie einen Übergang von der Quell-VC zur Ziel-VC mit einer Kennung.
Beispiel: "goToDestinationViewController" ist in Ordnung, um das Leben zu vereinfachen. Betrachten wir den aktuellen Ansichts-Controller, dh den, den Sie hinter Ihrer transparenten Ansicht als Quelle und das Ziel als Ziel haben möchten
Jetzt in Quell-VC in viewDidLoad: oder Ansicht
Gut, wir sind auf halbem Weg. Gehen Sie jetzt zu Ihrem Storyboard. Klicken Sie auf den Abschnitt. das sollte so aussehen: segue
Ändern Sie die Optionen in die angezeigten Optionen.
Jetzt kommt die echte Lösung.
Fügen Sie diesen Code in viewDidLoad Ihres Zielansichts-Controllers hinzu.
.................................................. .......................SO EINFACH......................... .........................................
quelle
self.modalPresentationStyle = .custom
funktioniert für mich bei der modalen Darstellung eines tatsächlichen Ansichts-Controllers mit transparentem Hintergrund in Swift 3, Xcode 8. Das einzige Problem besteht darin, dass die Registerkartenleiste vor dem transparenten angezeigt wird, wenn der präsentierende Ansichts-Controller in einen Registerkarten-Controller eingebettet ist Hintergrundansicht.tabBarController.tabBar.isHidden
sollten die Controller für die präsentierende Ansicht auf eingestellt werdentrue
.Alternativ können Sie auch eine "Containeransicht" verwenden. Machen Sie einfach Alpha unter 1 und binden Sie es mit der Sequenz ein. XCode 5, Ziel iOS7.
kann kein Bild zeigen, nicht genug Ruf)))
Containeransicht ab iOS6 verfügbar.
quelle
Dieser Code funktioniert auf dem iPhone unter iOS6 und iOS7 einwandfrei:
Auf diese Weise verlieren Sie jedoch die Animation "Slide-from-the-Bottom".
quelle
Ich habe diese elegante und einfache Lösung für iOS 7 und höher gefunden!
Für iOS 8 hat Apple UIModalPresentationOverCurrentContext hinzugefügt, aber es funktioniert nicht für iOS 7 und frühere Versionen, sodass ich es für meinen Fall nicht verwenden konnte.
Bitte erstellen Sie die Kategorie und geben Sie den folgenden Code ein.
.h Datei
.m Datei
Hinweis: Es funktioniert auch für navigationContoller, tabBarController.
Anwendungsbeispiel:
Geniesse es! und bitte hinterlassen Sie einige Rückmeldungen.
quelle
Dies ist der beste und sauberste Weg, den ich bisher gefunden habe:
quelle
Die beste Lösung, auf die ich gestoßen bin, ist die Verwendung der addChildViewController-Methode. Hier ein hervorragendes Beispiel: Fügen Sie die Ansicht eines untergeordneten Ansichtscontrollers zu einer Unteransicht des übergeordneten Ansichtscontrollers hinzu
quelle
Ich versuche, mehrere Methoden zu verwenden, um zu lösen, aber immer noch fehlgeschlagen, der folgende Code schließlich implementiert.
Die Entschließung von Swift:
dann in B view controller:
quelle