2017-01-14 44 views
0

我正在做一個調查iMessage應用程序(是的,我知道),並有一個問題在演示模式之間移動。下面的一系列截圖顯示,當應用程序啓動時,在緊湊模式下一切正常。當擴大一切仍是正確的,但後來當我回到壓縮內容是由什麼看起來像相同的高度大的消息導航欄下移(86我認爲)在iMessage中的ViewController changin的TopAnchor展示模式之間的擴展

enter image description here

我試着當切換回緊湊視圖時,將頂端約束設置爲-86,但是,這不是什麼都不做,或者將它返回到應該在的位置,然後減去86,這樣它消失得太高。我基於來自應用程序,所以不知道在哪裏這個問題是來自冰淇淋示例項目本項目(可能是自動版式,但一切都被固定在佈局指南)

下面是添加視圖控制器代碼:

func loadTheViewController(controller: UIViewController) { 
    // Remove any existing child controllers. 
    for child in childViewControllers { 
     child.willMove(toParentViewController: nil) 
     child.view.removeFromSuperview() 
     child.removeFromParentViewController() 
    } 

    // Embed the new controller. 
    addChildViewController(controller) 

    controller.view.frame = view.bounds 
    controller.view.translatesAutoresizingMaskIntoConstraints = true 
    view.addSubview(controller.view) 

    controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
    controller.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 

    controller.didMove(toParentViewController: self) 
} 

我一直在努力做到這一點,感覺永遠如此,所以歡迎任何建議。

回答

1

您正在對視圖設置約束,但您已將translatesAutoresizingMaskIntoConstraints設置爲true。自動調整掩碼約束可能會與您添加的約束衝突,導致意想不到的結果。你應該更改爲:

controller.view.translatesAutoresizingMaskIntoConstraints = false 

此外,而不是寄託於view.topAnchor,你應約束的topLayoutGuide,這將需要在頂部導航欄考慮。

controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true 

同樣,

controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true 
+0

謝謝,這是排序的。我檢查了Apple的IceCream示例應用程序,看起來像我已經改變了'translatesAutoresizingMaskIntoConstraints',但是由於某些原因,它們被鎖定在topAnchor而不是佈局指南。 – SimonBarker