class ViewController: UIViewController {

let childViewController:UIViewController = UIViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    childViewController.view.backgroundColor = UIColor.greenColor()
    self.addChildViewController(childViewController)
    childViewController.didMoveToParentViewController(self)
    self.view.addSubview(childViewController.view)
    childViewController.view.frame = CGRect(x: 0, y: 0, width: 300, height: 300)

    self.addObserver(self, forKeyPath: "childViewController.view.frame", options: .New, context: nil)
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    childViewController.view.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
}

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    print("\(childViewController.view.frame)")
}
}

上記のコードを実行すると、画面回転時に

(0.0, 0.0, 300.0, 300.0)
(0.0, 0.0, 0.0, 622.0)

と出力されます。

childViewController.view.frame = CGRect(x: 0, y: 0, width: 300, height: 300)

実行後、強制的にframeが書き換えられてしまうのですが、(0, 0, 0, 622)に書き換えられないようにする為の方法をご教示頂けませんでしょうか。

よろしくお願い致します。