Saturday 7 October 2017

Edgesforextendedlayout Lichtdurchlässige Platten


Ich möchte nicht, dass meine scrollView hinter der navigationBar standardmäßig ist. Also setze ich self. edgesForExtendedLayout UIRectEdgeNone. Diese viewDidLoad ist die Mutter ViewDidLoad von meinem ganzen viewController. Das ist gut. Aber ich mag die transluzente Wirkung. Es scheint, dass der transluzente Effekt weg ist, wenn ich self. edgesForExtendedLayout auf none setze. Wie setze ich das auf keine ein und habe noch diese durchscheinende Wirkung. Ich denke, eine gute Lösung wäre, um die Einfügung der scrollview zu ordnen. Und das ist, was ich bekam: It39s nicht für mich zu arbeiten, aber ich weiß nicht, warum, kann ich nur vermuten. Ich nehme an, dass, wenn you39re mit benutzerdefinierten Navigationscontroller oder ein benutzerdefiniertes Tool, um Ansicht-Controller anzeigen, Anpassung oder Inhalt Einfügungen möglicherweise nicht richtig berechnet werden, weil iOS der Ansicht, dass Ihre Navigationsleiste nicht angezeigt wird. Ndash Oleksii Kalentiev Oct 9 13 um 10: 43 In iOS 7 ist die UIStatusBar so entworfen worden, dass sie mit der Ansicht wie folgt zusammengeht: Es ist cool, aber es wird ein bisschen durcheinander bringen Ihre Ansicht, wenn Sie etwas an der Spitze Teil haben Ihre Ansicht, und sie wird mit der Statusleiste überlappt. Gibt es eine einfache Lösung (wie das Festlegen einer Eigenschaft in info. plist), die die Art, wie es funktioniert nicht überlappen zurück, wie es in iOS6 Ich weiß, eine einfachere Lösung ist, haben self. view. center. x 20 Punkte Für jede einzelne Ansicht-Controller, aber ändern sie schrauben anderen Dimensionen nach oben (mit einem anderen self. view. center. x können Probleme zu benutzerdefinierten Segues, etc.) und plötzlich wird es zu einem mühsamen Job, der am besten vermieden werden. Ill wirklich froh, wenn jemand kann mir eine Ein-Liner-Lösung für diese. P. S. Ich weiß, ich kann die Statusleiste zu verstecken, indem Sie Dinge wie mit In didFinishLaunchingWithOptions-Methode, aber das ist ein Workaround, eine Verknüpfung, die Vermeidung des Problems, so dass ich nicht berücksichtigen, dass eine echte Lösung. Dies ist Cross-posted von einem Blog-Post schrieb ich. Aber hier ist der vollständige Überblick über Statusleisten, Navigationsleisten und Container-View-Controller auf iOS 7: Es gibt keine Möglichkeit, das iOS 6 Style Statusleisten-Layout zu bewahren. Die Statusleiste wird immer überlappen Ihre Anwendung auf iOS 7 Verwechseln Sie nicht Statusleiste Aussehen mit Statusleiste Layout. Das Aussehen (Licht oder Voreinstellung) hat keinen Einfluss auf die Auslegung der Statusleiste (Frameheightoverlap). Wichtig ist auch, dass die Systemstatusleiste keine Hintergrundfarbe mehr hat. Wenn die API auf UIStatusBarStyleLightContent verweist, meinen sie weißen Text auf einem klaren Hintergrund. UIStatusBarStyleDefault ist schwarzer Text auf einem klaren Hintergrund. Das Aussehen der Statusleiste wird auf einem von zwei gegenseitig ausschließenden Basispfaden gesteuert: Sie können entweder programmgesteuert entweder auf traditionelle Weise setzen oder UIKit aktualisiert das Erscheinungsbild für Sie basierend auf einigen neuen Eigenschaften von UIViewController. Letztere Option ist standardmäßig aktiviert. Überprüfen Sie Ihre apps plist Wert für ViewController-basierte Statusleiste Aussehen zu sehen, die Sie verwenden. Wenn Sie diesen Wert auf YES setzen, muss jeder Top-View-Controller in Ihrer App (mit Ausnahme eines Standard-UIKit-Container-View-Controllers) PreferredStatusBarStyle überschreiben, wobei entweder der Standard - oder der Light-Stil zurückgegeben wird. Wenn Sie den plist-Wert auf NO bearbeiten, können Sie das Statusleisten-Erscheinungsbild mit den bekannten UIApplication-Methoden verwalten. UINavigationController ändert die Höhe seiner UINavigationBar auf 44 Punkte oder 64 Punkte, abhängig von einem ziemlich seltsamen und undokumentierten Satz von Einschränkungen. Wenn das UINavigationController erkennt, dass die Oberseite seines Ansichtenrahmens mit seinem UIWindows top visuell angrenzt, dann zeichnet es seine Navigationsleiste mit einer Höhe von 64 Punkten. Wenn seine Ansichten oben nicht mit dem UIWindows top (auch wenn off nur um einen Punkt) angrenzen, dann zeichnet es seine Navigationsleiste in der traditionellen Weise mit einer Höhe von 44 Punkten. Diese Logik wird von UINavigationController ausgeführt, auch wenn es mehrere Kinder innerhalb der View-Controller-Hierarchie Ihrer Anwendung gibt. Es gibt keine Möglichkeit, dieses Verhalten zu verhindern. Wenn Sie ein benutzerdefiniertes Navigationsleisten-Hintergrundbild mit nur 44 Punkten (88 Pixel) und die UINavigationController-Sichtenbegrenzungen mit den UIWindows-Schranken (wie in 4 besprochen) übereinstimmen, zeichnet das UINavigationController Ihr Bild im Rahmen (0,20,320, 44), so dass 20 Punkte undurchsichtigen schwarzen Raum über Ihrem benutzerdefinierten Bild. Das kann Sie verwirren, wenn Sie denken, dass Sie ein cleverer Entwickler sind, der Regel 1 umgangen hat, aber Sie irren sich. Die Navigationsleiste ist immer noch 64 Punkte groß. Das Einbetten eines UINavigationController in einer Dia-to-reveal-Style-Ansichtshierarchie macht dies sehr deutlich. Achten Sie auf die verwirrend benannte EdgesForExtendedLayout-Eigenschaft von UIViewController. Anpassen von KantenForExtendedLayout tut in den meisten Fällen nichts. Der einzige Weg UIKit verwendet diese Eigenschaft ist, wenn Sie einen View-Controller zu einem UINavigationController hinzufügen, dann die UINavigationController verwendet KantenForExtendedLayout, um festzustellen, ob der untergeordnete Ansicht-Controller unterhalb der Navigationsleiste Statusleiste Bereich sichtbar sein sollte. Das Einstellen von KantenForExtendedLayout auf dem UINavigationController selbst ändert nichts daran, ob der UINavigationController einen 44 oder 64 Punkt hohen Navigationsbereich hat. Siehe 4 für diese Logik. Eine ähnliche Layout-Logik gilt für den unteren Rand Ihrer Ansicht, wenn Sie eine Symbolleiste oder UITabBarController verwenden. Wenn Sie nur versuchen, Ihren benutzerdefinierten Kindersichtencontroller davon abzuhalten, die Navigationsleiste in einen UINavigationController zu überlappen, setzen Sie dann edgesForExtendedLayout auf UIRectEdgeNone (oder zumindest auf eine Maske, die UIRectEdgeTop ausschließt). Setzen Sie diesen Wert so früh wie möglich im Lebenszyklus Ihres View-Controllers. UINavigationController und UITabBarController werden auch versuchen, die contentInsets von Tabellenansichten und Sammlungsansichten in ihrer Untersichthierarchie aufzuladen. Dies geschieht in ähnlicher Weise wie die Statusleistenlogik von 4. Es gibt eine programmatische Möglichkeit, dies zu verhindern, indem Sie automatischAdjustsScrollViewInsets auf NO für Ihre Tabellenansichten und Sammlungsansichten setzen (standardmäßig auf JA). Für Whisper und Riposte wirkten sich einige ernsthafte Probleme aus, da wir mit contentInset-Anpassungen das Layout der Tabellenansichten in Reaktion auf Symbolleisten - und Tastaturbewegungen steuern. Um zu wiederholen: Es gibt keine Möglichkeit, um zurück zu iOS 6 Stil Statusleiste Layout-Logik. Um dies zu approximieren, müssen Sie alle View-Controller Ihrer App in eine Container-Ansicht verschieben, die um 20 Punkte vom oberen Rand des Bildschirms versetzt ist, wobei eine absichtlich schwarze Ansicht hinter der Statusleiste zurückbleibt, um das alte Erscheinungsbild zu simulieren. Dies ist die Methode, die wir am Ende in Riposte und Whisper. Apple ist dringend sehr hart, um sicherzustellen, dass Sie nicht versuchen, zu tun 9. Sie wollen, dass wir alle unsere Apps neu zu gestalten, um die Statusleiste zu unterlegen. Es gibt viele Argumente, aber für die Benutzerfreundlichkeit und technische Gründe, warum dies nicht immer eine gute Idee ist. Sie sollten tun, was das Beste für Ihre Nutzer und nicht einfach folgen Sie den launischen der Plattform. (0, 20, self. window. frame. size. width, self. window. frame. size. height) korrigierte Tippfehler in der NSNotificationCenter-Anweisung Updates am 12. September 2013: korrigiert UIViewControllerBasedStatusBarAppearance Zu NEIN hinzugefügt eine Lösung für Apps mit Bildschirmdrehung hinzugefügt einen Ansatz, um die Hintergrundfarbe der Statusleiste ändern. Es gibt anscheinend keine Möglichkeit, die iOS7-Statusleiste wieder auf die Funktionsweise von iOS6 zurückzusetzen. Allerdings können wir immer einige Codes schreiben und die Statusleiste in iOS6-like, und dies ist der kürzeste Weg kann ich kommen mit: Set UIViewControllerBasedStatusBarAppearance zu NEIN in info. plist (Um zu deaktivieren, die Ansicht der Controller die Statusleiste So dass wir den Statusleistenstil mithilfe der UIApplicationstatusBarStyle-Methode festlegen können.) In AppDelegates-Anwendung: didFinishLaunchingWithOptions. Anruf Überprüfen Sie, ob seine iOS 7. Setzen Sie Statusbalken Inhalt weiß zu sein, im Gegensatz zu UIStatusBarStyleDefault. Vermeiden Sie Subviews, deren Frames über die sichtbaren Grenzen hinaus reichen (für Ansichten, die in der Hauptansicht von oben animieren). Erstellen Sie die Illusion, dass die Statusleiste Speicherplatz wie, wie es in iOS 6 durch Verschieben und Ändern der Größe der apps Fensterrahmen. Für Anwendungen mit Bildschirmdrehung verwenden Sie NSNotificationCenter, um Ausrichtungsänderungen durch Hinzufügen von in (NSFoundationVersionNumber gt NSFoundationVersionNumberiOS61) zu ermitteln und eine neue Methode in AppDelegate zu erstellen: Wenn Sie die Ausrichtung ändern, wird eine switch - Anweisung ausgelöst, um die Ausrichtung des Apps-Bildschirms zu erkennen (Portrait, Upside Down, Landscape Left oder Landscape Right) und ändern Sie den App-Fensterrahmen, um die iOS 6-Statusleiste zu erstellen. So ändern Sie die Hintergrundfarbe Ihrer Statusleiste: Erstellen Sie in AppDelegate. h den Hintergrund einer Eigenschaft in Ihrer Klasse, und verhindern Sie, dass ARC diese deallokalisiert. (Sie müssen es nicht tun, wenn Sie nicht mit ARC.) Danach müssen Sie nur die UIWindow in erstellen, wenn (NSFoundationVersionNumber gt NSFoundationVersionNumberiOS61): Dont vergessen, Hintergrund nach der Umsetzung zu synthetisieren AppDelegate Dieses Update ist die beste Lösung der iOS 7 Navigation Bar Problem. Sie können Navigationsleiste Farbe Beispiel: FakeNavBar. backgroundColor UIColor redColor Hinweis. Wenn Sie Standard-Navigations-Controller verwenden Sie bitte alte Lösung. ALTE LÖSUNG - Wenn Sie den vorherigen Code verwenden, ignorieren Sie bitte Code und Image Dies ist eine alte Version der iOS 7 Navigationsleistenlösung. Ich löste das Problem mit dem folgenden Code. Dies dient zum Hinzufügen einer Statusleiste. DidFinishLaunchingWithOptions und für Interface Builder ist dies, wenn Sie mit iOS 6 öffnen, wird es bei 0 Pixel starten. Anmerkung: iOS 67 Deltas werden nur angezeigt, wenn Sie im Detailfenster die Option Autolayout für den View Controller im Dateieinspektor (linkssymbol) verwenden. Hier ein weiterer Ansatz für Projekte, die das Storyboard weitgehend nutzen: Ziel dieses Ansatzes ist es, den gleichen Statusleistenstil in iOS7 wie in iOS6 wiederherzustellen (siehe Fragetitel iOS 7 Statusleiste zu iOS 6-Stil). Um dies zu erreichen, verwenden wir das Storyboard so weit wie möglich durch Verschieben von UI-Elementen, die von der Statusleiste (unter iOS 7) nach unten verschoben werden, während Deltas verwendet werden, um die Abwärtslayoutänderung für iOS 6.1 oder früher wiederherzustellen. Der daraus resultierende zusätzliche Speicherplatz in iOS 7 wird dann von einem UIView belegt, wobei der backgroundColor auf eine Farbe unserer Wahl eingestellt ist. Letztere können in Code oder mit dem Storyboard erstellt werden (siehe ALTERNATIVES unten) Um das gewünschte Ergebnis zu erhalten, wenn die folgenden Schritte durchgeführt werden, wird davon ausgegangen, dass das View-Controllerbasierte Statusleisten-Erscheinungsbild auf NEIN gesetzt ist und dass auch Ihr Statusleistenstil vorhanden ist Die auf Transparente schwarze Schrift (Alpha von 0,5) oder opake schwarze Schrift eingestellt ist. Beide Einstellungen können unter Info in Ihren Projekteinstellungen gefunden oder hinzugefügt werden. Fügen Sie dem UIWindow eine Unteransicht hinzu, die als Statusleistenhintergrund dient. Um dies zu erreichen, fügen Sie folgendes zu Ihrer AppDelegates-Anwendung hinzu: didFinishLaunchingWithOptions: after makeKeyAndVisible Da Sie programmgesteuert einen Hintergrund für iOS 7 NUR hinzugefügt haben, müssen Sie das Layout Ihrer Benutzeroberflächeelemente anpassen, die von der Statusleiste entsprechend unter Beibehaltung des Layouts überlappt werden Für iOS6. Gehen Sie dazu wie folgt vor: Vergewissern Sie sich, dass Autolayout für Ihr Storyboard nicht aktiviert ist (dies ist der Fall, da sonst iOS 67 Deltas nicht im Größeninspektor angezeigt wird). Gehen Sie hierzu wie folgt vor: Wählen Sie Ihre Storyboard-Datei aus Show Utilities select Datei-Inspector anzeigen unter Interface Builder Dokument deaktivieren Verwenden Sie Autolayout Optional, um die Layoutänderungen für iOS 7 und 6 zu überwachen, wie Sie sie anwenden, wählen Sie den Assistenten-Editor aus IOS 6.1 oder früher: Wählen Sie nun das gewünschte UI-Element aus, so dass es nicht mehr von der Statusleiste überlappt wird. Wählen Sie den Größeninspektor in der Spalte Dienstprogramme an. Stellen Sie das UI-Element entlang der Y-Achse um denselben Wert wie die Statuszeile bg-Höhe ein : Und ändern Sie den iOS67 Deltas-Wert für Y durch die gleiche NEGATIVE Menge wie die Statusleiste bg Höhe (Beachten Sie die Änderung in der iOS 6 Vorschau, wenn Sie es verwenden): Um noch weniger Code in Storyboard-schwere Projekte und die Statusleiste Hintergrund haben Autorotate, anstatt programmgesteuert einen Hintergrund für die Statusleiste hinzuzufügen, können Sie eine farbige Ansicht zu jedem Ansichtscontroller hinzufügen, der ganz oben in der Viewcontroller-Hauptansicht sitzt. Sie würden dann das Höhen-Delta dieser neuen Ansicht auf denselben negativen Betrag wie Ihre Ansichtshöhe ändern (um es unter iOS 6 zu verschwinden). Der Nachteil dieser Alternative (wenn auch vielleicht vernachlässigbar unter Berücksichtigung der autorotate Kompatibilität) ist die Tatsache, dass diese zusätzliche Ansicht nicht sofort sichtbar ist, wenn Sie Ihr Storyboard für iOS 6 anzeigen. Sie würden nur wissen, dass es dort, wenn Sie einen Blick auf das Dokument Überblick über das Storyboard. Ich habe Statusleiste wie iOS 6 in iOS 7 erreicht. Set UIViewControllerBasedStatusBarAppearance zu NEIN in info. plist Pase dieser Code in - (BOOL) Anwendung: (UIApplication) Anwendung didFinishLaunchingWithOptions: (NSDictionary) launchOptions-Methode Es kann alle Ihre Ansichten bis 20 herunterdrücken (BOOL) animierte Methode Sie müssen windowHeight Userdefaults-Wert nach der Fensterzuweisung in didFinishLauncing Methode wie UNTIL I drehen das Gerät (mein iOS 7-Gerät ist ein iPad) gesetzt, Diese fixiert es perfekt. Aber sobald ich mich drehe, bleibt der schwarze Balken genau dort, wo er ist, und das quotviewquot (sorry, wenn das der falsche technische Begriff, I39m ein PhoneGapweb Kerl ist) behält seine geschrumpfte Höhe - außer it39s nicht mehr die Höhe, it39s die Breite. Diese Lösung doesn39t Unterstützung Rotation, aber es ist die beste Lösung, die ich gesehen habe - wie kann es verbessert werden, um für Geräte-Rotationen zu sehen Dank ndash tylerl Wenn Sie mit Interface Builder, versuchen Sie dies: In Ihrer xib-Datei: 1) Wählen Sie Die Hauptansicht, stellen Sie die Hintergrundfarbe auf schwarz (oder was auch immer Farbe, die Sie die Statusleiste zu 2) Vergewissern Sie sich, dass der Hintergrund ist eine selbst enthaltene Unteransicht positioniert als oberstes untergeordnetes Element der Controller-Ansicht. Bewegen Sie den Hintergrund, um ein direktes Kind der Controller-Ansicht zu werden. Überprüfen Sie, ob Sie alle Rahmenkanten gesperrt haben, die beiden Flexibilitätsachsen aktiviert haben, und wenn es sich um eine UIImageView handelt, legen Sie den Inhaltsmodus auf Skalieren fest, um sie zu füllen. Programmatischerweise bedeutet dies, dass contentMode auf UIViewContentModeScaleToFill gesetzt ist und seine automatische Größenanpassung auf (UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleHeight) festgelegt ist. 3) Verschieben Sie nun alles, was gesperrt ist, nach oben - nach unten um 20 Punkte und setzen Sie ein iOS 67 Delta Y auf -20. Alle Top-Level-Kinder, die auf dem oberen Frame im Autosizing-Panel gesperrt sind, müssen um 20pts nach unten verschoben werden und ihr iOS 67 Delta Y auf -20 gesetzt. (Cmd wählen Sie alle diejenigen, und klicken Sie auf Pfeil 20 mal - gibt es eine bessere Weise jedermann) 4) Passen Sie die iOS 67 Delta Höhe aller der oben genannten Elemente, die eine flexible Höhe hatte. Alle Elemente, die an den Rahmen oben und unten gesperrt wurden und die flexible Höhe im Autosizing-Panel aktiviert haben, müssen ebenfalls ihre iOS 67-Delta-Höhe auf 20 setzen. Das schließt die oben erwähnte Hintergrundansicht ein. Dies mag intuitive, aber aufgrund der Reihenfolge, in der diese angewendet werden, ist es notwendig. Die Rahmenhöhe wird zuerst eingestellt (basierend auf der Vorrichtung), dann werden die Deltas angewendet, und schließlich werden die Autosizing-Masken auf der Grundlage der Offset-Positionen aller untergeordneten Rahmen angewendet - denken Sie es für ein bisschen, wird es Sinn machen. 5) Schließlich benötigen Gegenstände, die am unteren Rahmen, aber nicht am oberen Rahmen befestigt waren, überhaupt keine Deltas. Das gibt Ihnen die identische Statusleiste in iOS7 und iOS6. Andererseits, wenn Sie iOS7-Styling wünschen, während die Kompatibilität von iOS6 aufrechterhalten wird, legen Sie die Delta-Y-Delta-Höhenwerte auf 0 für die Hintergrundansicht fest. Dies kann ein überwältigendes Problem sein, wenn Sie Auto-Layout verwenden, da Sie Frames nicht mehr direkt manipulieren können. Es gibt eine einfache Lösung ohne zu viel Arbeit. Ich am Ende schrieb eine Utility-Methode in einer Utility-Klasse und nannte es von allen View-Controllern ViewDidLayoutSubviews-Methode. Überschreiben Sie Ihre viewDidLayoutSubviews-Methode in der Ansicht-Controller, wo Sie die Statusleiste. Es wird Ihnen durch die Last von Autolayout. Antwort # 2 am: März 28, 2010, um 17:18 Uhr Der einfachste Weg, dies zu tun ist die Installation eines älteren SDK zu Ihrem neuesten Xcode. Wie man älteres SDK auf den neuesten Xcode U anbringen kann, kann das iOS 6.1 SDK von 4sharedzipNlPgsxz6iPhoneOS61sdk. html erhalten oder ein älteres Xcode herunterladen und das SDK aus seinem Inhalt holen. Fügen Sie diesen Ordner ein und fügen Sie ihn in ApplicationsXcode. appContentsDeveloperPlatformsiPhoneOS. platformDeveloperSDKs Starten Sie den xcode neu. U kann jetzt wählen Sie ein älteres SDK auf Ihre Projekte Build-Einstellungen Hoffe, es hilft Ihnen. Es hat für mich geholfen) beantwortet Oct 3 13 bei 19:06 arbeitete für mich. Danke Marcelosalloum aber immer noch auf der Suche nach einem Workaround für meine phonegap (uiwebview) App auf iOS739s transparente Statusleiste für die zukünftige Aktualisierung meiner App zu unterstützen. Danke noch einmal. ) Ndash hanism marcellosaloum, sind Sie sicher, dass die App wird von Apple akzeptiert Sie sagten, dass die mit XCode 4 kompilierten Apps nicht mehr akzeptiert werden. Dass in der Tat bedeutet iOS 6 SDK. Ndash bettola Dies könnte zu spät sein, um zu teilen, aber ich habe etwas zu helfen, die jemand helfen könnte, versuchte ich, Sub-Klasse der UINavigationBar und wollte es aussehen wie ios 6 mit schwarz Statusleiste Und Statusleiste Text in weiß. Hier ist, was ich für die Arbeit gefunden Es hat meine Statusleiste Hintergrund schwarz, Statusleiste Text weiß und Navigationsleisten Farbe weiß. IOS 9.3, XCode 7.3.1 beantwortet Mai 31 16 at 11:16 2017 Stack Exchange, Inc

No comments:

Post a Comment