2015-11-25 4 views
14

Вот мой demo project.Интерактивный контроллер просмотра с контроллера вида со скрытой строкой

У меня есть два контроллера вида. У главного есть строка состояния, скрытая, а вторая - нет.

Я создал пользовательскую управляемую анимацию перехода, чтобы перейти от контроллера к контроллеру два.

Когда я нахожусь на контроллере детского вида (оранжевый), я запускаю ведомый переход путем панорамирования сверху вниз. Вы можете видеть, что строка состояния возвращается при перетаскивании. И UIButton «Привет» также перемещается.

Отменить переход. Затем я запускаю его снова, и вы можете видеть, что строка состояния также возвращается, но на этот раз моя кнопка не перемещается, она остается в том же месте, как если бы строка состояния все еще была скрыта.

Любая идея, почему она будет вести себя так, как только переход был отменен хотя бы один раз?

(Я даже не говорю о странной вещи с анимацией, которая удваивается при отмене (возможно, ошибка с симулятором, поскольку она не делает это на моем iphone 6 9.1 и моем iphone 5 8.4.)

enter image description here

+0

Я не думаю, что это проблема с тренажером. Я положил его на iPhone 6 (iOS 9), и это все еще было проблемой. – Fomentia

+0

Помог ли мой ответ решить вашу проблему? – FredLoh

+0

У меня еще не было времени проверить это, я дам вам знать как можно скорее. Спасибо, в любом случае. – Nico

ответ

4

добавить: import Foundation

Затем добавьте выход:

class ViewController: UIViewController { @IBOutlet weak var topConstraint: NSLayoutConstraint! ... } Затем измените значение 0, когда представление исчезает и затем до 20, когда она появится:

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

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

Полный код (обязательно запомните подключить ограничение к выходу):

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

Проблема в том, что это больше похоже на взлом, чем на реальное решение, и я до сих пор не понимаю, почему он ведет себя так ... но он работает :). Я бы просто изменил 'topConstraint.constant = 20.0' на' topConstraint.constant = statusBarHeight' и добавил сверху 'let statusBarHeight = UIApplication.sharedApplication(). StatusBarFrame.height' – Nico

Смежные вопросы