
[code]

    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)")
    }
    }
    
[/code]

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

[code]

    (0.0, 0.0, 300.0, 300.0)
    (0.0, 0.0, 0.0, 622.0)
    
[/code]

と出力されます。

[code]

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

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

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


CC BY-SA 3.0
2015-11-07T14:23:28.317
18522
2021-04-01T09:20:26.670
13167
question
ios swift xcode
画面回転でchildViewController.view.frameが変化してしまう


`viewのサイズを変更する`  
ではなく、  
`viewの中に300x300のUIViewを配置する`  
ほうがいいと思います。


CC BY-SA 4.0
2021-04-01T09:20:26.670
75017
2021-04-01T09:20:26.670
39579
18522
answer