2015-11-25 20 views
14

Ecco il mio demo project.Transizione del controller di visualizzazione interattiva dal controller di visualizzazione con barra di stato nascosta

Ho due controller di vista. Quello principale ha la barra di stato nascosta mentre la seconda non lo ha.

Ho creato un'animazione di transizione personalizzata per passare dal controller uno al controller due.

Quando sono sul controller di visualizzazione figlio (quello arancione), avvio la transizione guidata eseguendo il panning dall'alto verso il basso. Puoi vedere che la barra di stato sta tornando durante il trascinamento. E anche lo UIButton "Ciao" si sta muovendo.

Annullo la transizione. Poi lo avvio di nuovo e puoi vedere che la barra di stato sta tornando, ma questa volta, il mio pulsante non si muove, rimane nella stessa posizione, come se la barra di stato fosse ancora nascosta.

Qualche idea sul perché si comporterebbe in questo modo una volta che la transizione è stata annullata almeno una volta?

(Non sto nemmeno parlando della cosa strana con l'animazione che è più o meno raddoppiata quando si annulla (forse un bug con il simulatore in quanto non lo fa sul mio iphone 6 9.1 e sul mio iphone 5 8.4.)

enter image description here

+0

non credo che sia un problema con il simulatore. L'ho messo su un iPhone 6 (iOS 9) ed era ancora un problema. – Fomentia

+0

La mia risposta ha risolto il tuo problema? – FredLoh

+0

Non ho ancora avuto il tempo di controllarlo, ti farò sapere al più presto. Grazie comunque. – Nico

risposta

4

Add: import Foundation

Quindi aggiungere una presa di corrente:

class ViewController: UIViewController { @IBOutlet weak var topConstraint: NSLayoutConstraint! ... } quindi modificare il valore a 0 quando la vista scompare e poi a 20, quando apparirà:

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

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

codice completo (assicuratevi di ricordarsi di collegare il vincolo alla presa):

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

Il problema è che è più come un hack che una soluzione reale e non capisco ancora perché si comporta in questo modo ... ma sembra funzionare :). Cambiarei semplicemente 'topConstraint.constant = 20.0' con' topConstraint.constant = statusBarHeight' e aggiungendo in alto 'let statusBarHeight = UIApplication.sharedApplication(). StatusBarFrame.height' – Nico

Problemi correlati