Переключение интерфейса интерактивного представления с контроллера просмотра со скрытой панелью состояния

Вот мой демонстрационный проект .

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

Я создал настраиваемую переходную анимацию с переходами от контроллера к контроллеру два.

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

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

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

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

введите описание изображения здесь

Ответы

Ответ 1

Добавить: 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)

    }

}