2016-07-03 7 views
0

Meine App hat zwei Hauptansichten, die auf Orientierungsänderung eingeschaltet sind, die Ansicht im Hochformat sollte eine Navigationsleiste darüber haben (mein Code wird in einem getestet separate Anwendung, die funktioniert perfekt, so habe ich entweder falsch übertragen, drückte einige seltsame Option, die die Bar zur Laufzeit deaktiviert, oder das System ist nicht kompatibel mit der Landschaftsansicht Controller, der nicht mit dem Navigationscontroller verbunden ist), aber es nicht .Xcode Swift Navigationsleiste verschwindet, wenn Simulator läuft, aber nicht im Storyboard

PS: Das Etikett ändert es ist Wert auf die Zeichenfolge auf der Tabellenzelle, die gedrückt wird, und das Tier/mounth

Storyboard zeigt Navigationsleisten:
Storyboard showing navigation bars

Screenshot zeigt Simulator ohne Navigationsleiste die Tabellenansicht im gebrochenen Projekt:
Screenshot showing simulator without navigation bar on the table view in the broken project

---- wollte diese Links posten, aber nicht genug Rufpunkte haben ----

Screenshot von resultieren aus einer Tabellenzelle klopfen, sollte einen Zurück-Pfeil in oben halten können

Screenshot aus dem Arbeitstestproject (die nicht die Ansicht enthält, die instanziiert wird, wenn das Gerät auf Landschaft orientiert), die zeigt, was die vorherigen Screenshot wie

aussehen sollte, ich werde auch meine AppDelegate Klasse zeigen, die den Hauptunterschied zwischen dem Arbeitsprojekt und dem zerbrochenen Projekt enthält:

var window: UIWindow? 
var storyboard:UIStoryboard! 
var initialViewController:UIViewController! 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    // Create rotation function and call it whenever the device is rotated 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(AppDelegate.rotated), name: UIDeviceOrientationDidChangeNotification, object: nil) 

    // Set default ViewController based on rotation 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    storyboard = UIStoryboard(name: "Main", bundle: nil) 
    // Declare InitialViewController as portrait to avoid NSInternalInconsistencyException 
    initialViewController = storyboard.instantiateViewControllerWithIdentifier("PortraitViewController") 

    // Declare initial view controller based on device orientation 
    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)){ 
     initialViewController = storyboard.instantiateViewControllerWithIdentifier("PortraitViewController") 
    } else if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)){ 
     initialViewController = storyboard.instantiateViewControllerWithIdentifier("LandscapeViewController") 
    } 

    self.window?.rootViewController = initialViewController 
    self.window?.makeKeyAndVisible() 

    return true 
} 

/// Called when the screen is rotated 
func rotated() 
{ 
    // if device is landscape show LandscapeViewController 
    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)) 
    { 
     initialViewController = storyboard.instantiateViewControllerWithIdentifier("LandscapeViewController") 
     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 
    } 
    // if device is portrait show PortraitViewController 
    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)) 
    { 
     initialViewController = storyboard.instantiateViewControllerWithIdentifier("PortraitViewController") 
     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 
    } 
} 
+0

Verdammt, das ist sofort behoben. Ich werde meinen Fix veröffentlichen, um anderen in der Zukunft zu helfen. –

Antwort

0

ich war Instanziieren den Hafen rait view controller, wenn die App im Hochformat geladen wurde, die die Ansicht direkt geladen hat, anstatt sie über den Navigationscontroller zu laden. Dadurch wird verhindert, dass die navbar jemals geladen wird. Also ging ich zu meinem Storyboard und gab dem Navigationscontroller die Storyboard-ID "NavController", dann ersetzte ich alle Anwendungen von "PortraitViewController" in AppDelegate durch "NavController". Das bedeutete, dass der Nav-Controller die Tabellenansicht statt der Anwendung übersprang und Laden der Tabellenansicht ohne Navbar beim Start.