NavigationBar ist nicht sichtbar

8

Erläuterung: Ich habe einen Viewcontroller, der eine Navigationsleiste und eine UIWebView enthält. Die Webansicht wird in der .m-Datei als Vollbild angezeigt. Auf dem Viewcontroller ist die Navigationsleiste nach vorne angeordnet.

Was passiert: Wenn ich die App starte, ist nur das Webview (Vollbild) sichtbar, aber die Navigationsleiste ist nicht da.

Was passieren soll: Das ist selbsterklärend, aber die Navigationsleiste soll oben mit einem Webview darunter liegen.

Wie es aussieht

.m-Datei

%Vor%

.h-Datei

%Vor%

Problem / Frage: Die Navigationsleiste ist nicht sichtbar, wie kann dies behoben werden, so dass sowohl die Webansicht als auch die Navigationsleiste sichtbar sind?

    
PHP Web Dev 101 28.08.2015, 18:22
quelle

6 Antworten

3

Also kann ich das, was Sie gerade erleben, replizieren, und ich habe zwei Projekte abgeschlossen, damit Sie sie sehen können. Hier sind einige Screenshots, aber zuerst ist der Code, den ich benutze, dein Code auf diese Weise:

  1. Erstellen Sie eine einzelne Anwendung

  2. Ersetze die Ansicht, die mit der geladenen Ansicht geladen wurde

Hier sind die Ergebnisse der Verwendung Ihres Codes mit einer Navigationsleiste mit Ihrem Code und einer Navigationsleiste wie Sie gesagt haben:

Sie können dieses Projekt hier herunterladen: Ссылка

Erweitertes Layout (das gleiche Ergebnis wie bei Ihnen):

Storyboard-Layout:

Also, angesichts der obigen Screenshots und der Navigationsleiste, die hinter der Web-Ansicht platziert wird, liegt das zum Teil an der Tatsache, dass ich keinen Navigationscontroller habe, der meinen View-Controller so die Platzierung einer Navigationsleiste hält ist völlig nutzlos und erscheint nicht auf dem Bildschirm. Außerdem würde die Navigationsleiste nicht einmal etwas tun, wenn sie angezeigt würde, da in der Hierarchie kein Navigationscontroller vorhanden ist.

Nun, angesichts dieses ersten Beispiels, hier ist eine Korrektur.

Das ist das selbe wie das Layout wie oben, aber der Unterschied ist, dass ich den View-Controller in einem Navigations-Controller verwurzelt habe. Alles bleibt gleich und tatsächlich habe ich dem Storyboard nicht einmal eine Navigationsleiste hinzugefügt da dies automatisch durch das Rooten eines View-Controllers eines Navigations-Controllers erzeugt wird.

Sie können dieses Projekt herunterladen: Ссылка

Erweitertes Layout:

Storyboard-Layout:

Also, der Unterschied hier ist, dass ich den View-Controller in einem Navigations-Controller rooted.

Fazit:

Es kann sehr gut der Fall sein, dass das Problem, das Sie erleben, völlig anders ist als das Problem, das ich oben erklärt habe, aber mit Ihrem Code konnte ich das gleiche Ergebnis erzielen wie in meinem ersten Beispiel. In meinem zweiten Beispiel konnte ich eine Webansicht verwenden, genau so, wie Sie es mit Ihrem Code zeigen, und ich habe tatsächlich eine Navigationsleiste für dieses zweite Beispiel. Das einzige, was ich im zweiten Beispiel geändert habe, war, den View-Controller in einem Navigations-Controller zu rooten.

    
Loxx 31.08.2015, 03:28
quelle
2

debuggen Sie Ihre Ansichten und überprüfen Sie, ob Ihr root-View-Controller Navigationscontroller ist oder nicht. Überprüfen Sie auch self.navigationController == nil

    
Bevan 05.09.2015 18:24
quelle
2

0 Zeilen Code Lösung

Erstellen Sie die UIWebview -Erstellung in Storyboard : Layout, Einschränkungen, Navigationsleiste von Navigation Controller, Titel, verweisende Verkaufsstellen, Delegierte, alles. Jedes Setup-Element, das auf Ressourcenebene implementiert wird, entfernt Codezeilen, potenzielle Fehler, Tests, Kopfschmerzen und Frustrationen.

Ganze Klasse

%Vor%

Die Lösung wird sprachunabhängig und funktioniert in Swift & amp; Obj-C .

► Finden Sie diese Lösung auf GitHub und weiteren Details auf Schnelle Rezepte .

    
SwiftArchitect 04.09.2015 22:24
quelle
1

Ist die ViewController2 tatsächlich in UINavigationController oder wurde die UINavigationBar in der Ansicht in Storyboard platziert?

Wenn Sie gerade den UINavigationBar in die Ansicht in Storyboard gezogen haben und dann in der viewDidLoad -Methode den UIWebView (mit einem Rahmen des vollständigen UIView des ViewController2 ), dann sehen Sie natürlich nicht UINavigationBar , weil es von UIWebView abgedeckt wird.

Wenn die ViewController2 tatsächlich in UINavigationController ist, brauche ich mehr Details, um das Problem zu finden.

BEARBEITEN: Ein (möglicherweise) nicht verwandtes Problem:

In Ihrer Storyboard haben Sie bereits eine UIWebView platziert, die vermutlich mit der IBOutlet von webView2 verbunden ist.

Warum stellst du in deinem UIWebView code% code% ein? Sie haben bereits einen und können ihn einfach referenzieren, anstatt scheinbar ohne Grund einen neuen zu erstellen.

    
Will 28.08.2015 18:32
quelle
1

Kurz und einfach:

  1. Höchstwahrscheinlich verwenden Sie simulierte Metriken, um eine Navigationsleistenansicht im Storyboard anzuzeigen. Simulierte Metics-Abschnittsparameter werden nur verwendet, um zu überprüfen, wie Ihre Schnittstelle auf den verschiedenen Geräten mit unterschiedlichen Auflösungen aussehen wird. Sie haben keinen direkten Einfluss auf die Laufzeitansicht.

  1. Damit Ihr View-Controller oben eine Navigationsleiste anzeigt (View-Controller), sollte er im Allgemeinen einen UINavigationController als übergeordnete VC haben (wie von @SwiftArchitect gezeigt).
slxl 05.09.2015 17:29
quelle
0

Für diejenigen von Ihnen, für die nichts von dem oben genannten funktioniert, habe ich gerade ein anderes Problem gefunden, das dazu führen kann, dass die Navigationsleiste nicht angezeigt wird. Wenn Sie bereits einen Navigationscontroller hinzugefügt haben und die Navigationsleiste nicht angezeigt wird, könnte dies für Sie gelten, wenn Sie eine ähnliche Einstellung für mich haben. Ich habe eine Login-VC, die dann über den Navigationscontroller mit einem News-Feed verknüpft wird. Wenn Sie den News-Feed im Attribut-Inspector auf Initial View-Controller setzen, wird die Navigationsleiste nicht angezeigt. Wenn Sie jedoch den News-Feed über die Anmeldeseite (d. H. Login) erreichen und Sie daher vom Navigationscontroller dorthin weitergeleitet werden, wird die Navigationsleiste angezeigt. Wenn Sie möchten, dass die Navigationsleiste angezeigt wird, verwenden Sie nicht "Initial View Controller".

    
pho_pho 12.07.2016 22:02
quelle