2016-07-04 73 views
0

我在Xcode 7中使用Autolayout並定位到iOS 9.3。我有一個主視圖控制器,它擁有一個容器視圖。容器視圖包含一個子視圖控制器。Swift:容器視圖佈局在旋轉並再次旋轉時發生變化

容器視圖的前導和尾隨約束爲-20,因此它完全在水平方向上覆蓋主視圖控制器。

然而,當主視圖控制器第一次加載時,容器內顯示的子視圖控制器的內容在左側和右側略微切斷(就好像它不識別約束在-20左右)。

當我將設備旋轉到橫向,然後再次回到原始縱向時,子視圖控制器突然正確縮放,不再在左側和右側切斷。

所以看起來像是一些佈局方法在將設備側向旋轉並將其旋轉回來時被調用,這種方法在視圖第一次加載時不會被調用。這可能是什麼方法?有沒有辦法,我可以手動調用此方法來強制更新佈局/大小,當孩子第一次加載,以便它看起來像旋轉和向後旋轉後相同?

+0

請顯示codez。根據我對自動佈局的經驗,你應該總是懷疑你的代碼是這種情況下的罪魁禍首,所以最可能發生的事情是你的約束設置不是你想象的那樣,但是如果沒有看到代碼就不能多說。 – lawicko

+0

您可以在視圖上調用'layoutIfNeeded()'來觸發佈局的更新。至於你正在尋找的方法:假設你沒有使用旋轉方法,方向改變觸發的方法將是'viewWillTransitionToSize:' – sketchyTech

+0

我已經嘗試調用Container視圖的viewDidAppear方法中的layoutIfNeeded()。我也嘗試在子視圖控制器的viewDidAppear方法中調用它,但這沒有效果。 – Stanley

回答

0

首先,您不需要爲-20設置保證金。容器視圖每邊的0邊距足以使子視圖分散到主容器視圖之外。我已經嘗試了你的想法,但沒有問題。您可以從下面的github鏈接下載該項目;

The link

0

我找到了一個解決問題的辦法:

而不是設置一個前沿和-20在容器視圖尾隨約束,我設置的容器視圖約束爲相同的寬度作爲主視圖並將其居中放置在容器中。

有了這些限制,它可以在第一次加載時起作用,但我無法完全解釋爲什麼它的行爲與原始限制不同。我想這個教訓是,如果在某些情況下,使用Autolayout來確定容器大小的方式會有些笨拙,請嘗試使用另一組約束來達到相同的結果。

+0

stanley,我在使用應用程序時遇到了容器問題.. [link](http://stackoverflow.com/questions/38008852/uipageviewcontroller-within-a-containerview-is-not-working-properly)。這是link.please只是看看。 –