2015-11-25 13 views
14

Hier ist meine demo project.Interaktive Ansicht Controller-Übergang vom View-Controller mit Statusleiste versteckt

Ich habe zwei View-Controller. Die Hauptleiste hat die Statusleiste ausgeblendet, während die zweite nicht.

Ich erstellte eine benutzerdefinierte Transitionsanimation, um von Controller eins zu Controller zwei zu gehen.

Wenn ich auf dem Kind-View-Controller bin (der orangefarbene), starte ich den gesteuerten Übergang durch Schwenken von oben nach unten. Sie können sehen, dass die Statusleiste beim Ziehen zurückkehrt. Und die UIButton "Hallo" bewegt sich auch.

Ich storniere den Übergang. Dann starte ich es wieder und Sie können sehen, dass die Statusleiste ebenfalls zurückkehrt, aber dieses Mal bewegt sich meine Schaltfläche nicht, sie bleibt am selben Ort, als ob die Statusleiste immer noch verborgen wäre.

Eine Idee, warum es sich so verhalten würde, sobald der Übergang mindestens einmal abgebrochen wurde?

(Ich spreche nicht einmal über die seltsame Sache mit der Animation, die beim Abbrechen verdoppelt wird (vielleicht ein Bug mit dem Simulator, wie es nicht auf meinem iPhone 6 9.1 und meinem iPhone 5 8.4 tut.

)

enter image description here

+0

Ich glaube nicht, dass es ein Problem mit dem Simulator ist. Ich legte es auf ein iPhone 6 (iOS 9) und es war immer noch ein Problem. – Fomentia

+0

Hat meine Antwort Ihr Problem gelöst? – FredLoh

+0

Ich hatte noch keine Zeit es zu überprüfen, ich werde es so schnell wie möglich wissen lassen. Danke trotzdem. – Nico

Antwort

4

Anzahl: import Foundation

Dann einen Ausgang hinzufügen:

class ViewController: UIViewController { @IBOutlet weak var topConstraint: NSLayoutConstraint! ... } Dann den Wert auf 0 geändert werden, wenn die Ansicht verschwindet und dann auf 20, wenn es erscheint:

override func viewWillAppear(animated: Bool) { 
    topConstraint.constant = 20.0 
} 

override func viewWillDisappear(animated: Bool) { 
    topConstraint.constant = 0.0 
} 

Voll Code (vergewissern Sie sich zu erinnern, die Einschränkung der Steckdose zu verbinden):

import UIKit 
import Foundation 

class ViewController: UIViewController { 

    @IBOutlet weak var topConstraint: NSLayoutConstraint! 
    let controllerTransition = InteractiveControllerTransition(gestureType: .Pan) 
    let controllerTransitionDelegate = ViewController2Transition() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     controllerTransition.delegate = controllerTransitionDelegate 
     controllerTransition.edge = .Bottom 


    } 

    override func viewWillAppear(animated: Bool) { 
     topConstraint.constant = 20.0 
    } 

    override func viewWillDisappear(animated: Bool) { 
     topConstraint.constant = 0.0 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func unwindToViewController(sender: UIStoryboardSegue) { } 

    override func prefersStatusBarHidden() -> Bool { 
     return false 
    } 

    @IBAction func helloButtonAction(sender: UIButton) { 
//  let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
//  let vc = storyBoard.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2 
//  
//  vc.transitioningDelegate = controllerTransition 
//  controllerTransition.toViewController = vc 
//  
//  self.presentViewController(vc, animated: true, completion: nil) 

     let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
//  let nvc = storyBoard.instantiateViewControllerWithIdentifier("NavigationViewController2") as! UINavigationController 
//  let vc = nvc.topViewController as! ViewController2 

     let vc = storyBoard.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2 





//  nvc.transitioningDelegate = controllerTransition 
     vc.transitioningDelegate = controllerTransition 
     controllerTransition.toViewController = vc 

//  self.presentViewController(nvc, animated: true, completion: nil) 
     self.presentViewController(vc, animated: true, completion: nil) 

    } 

} 
+1

Das Problem ist, dass es mehr wie ein Hack als eine echte Lösung ist und ich immer noch nicht verstehe, warum es sich so verhält ... aber es scheint zu funktionieren :). Ich würde "topConstraint.constant = 20.0" nur durch "topConstraint.constant = statusBarHeight" ändern und oben "let statusBarHeight = UIApplication.sharedApplication(). StatusBarFrame.height" hinzufügen – Nico

Verwandte Themen