2015-11-25 5 views
14

Voici mon demo project.Transition du contrôleur de vue interactive du contrôleur de vue avec barre d'état masquée

J'ai deux contrôleurs de vue. Le principal a la barre d'état cachée tandis que le second n'a pas.

J'ai créé une animation de transition personnalisée pour passer du contrôleur un au contrôleur deux. Lorsque je suis sur le contrôleur de vue enfant (le curseur orange), je lance la transition pilotée en effectuant un panoramique de haut en bas. Vous pouvez voir que la barre d'état revient quand vous faites glisser. Et le UIButton "Bonjour" se déplace également.

J'annule la transition. Puis je le relance et vous pouvez voir que la barre d'état revient aussi mais cette fois, mon bouton ne bouge pas, il reste au même endroit, comme si la barre d'état était toujours cachée.

Une idée de la raison pour laquelle il se comporterait ainsi une fois que la transition aura été annulée au moins une fois?

(Je ne parle même pas de la chose bizarre avec l'animation qui est un peu doublée lors de l'annulation (peut-être un bug avec le simulateur car il ne le fait pas sur mon iphone 6 et mon iphone 5 8.4.)

enter image description here

+0

Je ne pense pas que ce soit un problème avec le simulateur. Je l'ai mis sur un iPhone 6 (iOS 9) et c'était toujours un problème. – Fomentia

+0

Est-ce que ma réponse a résolu votre problème? – FredLoh

+0

Je n'ai pas encore eu le temps de le vérifier, je vous le ferai savoir dès que possible. Merci quand même. – Nico

Répondre

4

Ajouter: import Foundation

Puis ajouter une sortie:

class ViewController: UIViewController { @IBOutlet weak var topConstraint: NSLayoutConstraint! ... } Ensuite, changez la valeur à 0 lorsque la vue disparaît et puis à 20 quand il apparaît:

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

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

code complet (assurez-vous de se rappeler de se connecter la contrainte à la sortie):

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

Le problème est que c'est plus un hack qu'une vraie solution et je ne comprends toujours pas pourquoi il se comporte comme ça ... mais ça semble marcher :). Je voudrais simplement changer 'topConstraint.constant = 20.0' par' topConstraint.constant = statusBarHeight' et ajouter en haut 'let statusBarHeight = UIApplication.sharedApplication(). StatusBarFrame.height' – Nico