2014-01-21 112 views
8

我正面臨一個問題。我正在開發應用程序,我正在使用storyboardAutolayout已啓用。現在我的UIViewControllers之一,我已經放置了一個UIView(說A)。現在A有多個子視圖(準確地說是UIViews)。我已對A應用了「Horizontally and Vertically centered」約束.A內的子視圖對它們沒有任何約束。使用自動佈局重置UIView幀

現在在我的代碼,我有動畫是A.裏面裏面那個方法我稱之爲UIView's動畫方法子視圖的方法...

[UIView animateWithDuration: delay: options: animations: completion:]; 

和動畫子視圖的內觀A.之一現在問題是這些幀變化不會持續。當我在當前視圖控制器上對視圖控制器進行模式設置,然後解除它時,A中所有子視圖的幀都會被重置。

我搜索了一下,發現了問題,因爲自動佈局存在的。我禁用了它,然後再次嘗試,一切運行良好。

但是什麼是解決方法Autolayout啓用...?

我錯過了什麼......?

有趣的是,在計算器上很多帖子建議

使用自動佈局時,我們應該動畫的約束,而不是框架。

但我還沒有應用於該是內部視圖A.約束子視圖的任何約束上查看A.只適用

感謝。

+0

你問了很多東西,其中包括那些令人失望的建議。會建議你將其分成不同的問題,幷包括一些支持核心問題的代碼示例 –

+0

重置爲什麼?你如何在第一個地方添加這些視圖? – jrturton

回答

17

對於所有您在動畫寫下面的代碼viewDidLoad中

myViewToAnimate.translatesAutoresizingMaskIntoConstraints = YES; 

希望這有助於

+0

用您的自動佈局在 –

+0

上做到這一點是的好...我今天會嘗試...並讓您知道它是否可行...無論如何感謝... –

+0

我試過了。它的工作原理。子視圖開始使用自動佈局進行動畫製作。但它會打印以下警告... 無法同時滿足約束條件。下面列表中的至少一個約束可能是你不想要的。試試這個:(1)看看每個約束,並試圖找出你不期望的; (2)找到添加不需要的約束或約束並修復它的代碼。注意如果您看到您不明白的NSAutoresizingMaskLayoutConstraints,請參閱UIView屬性的文檔translatesAutoresizingMaskIntoConstraints –

3

原因是自動佈局將更新視圖到原來的位置的意見。 Autolayout系統將根據佈局約束定期設置視圖層次結構中每個視圖的位置和大小。在viewDidLayoutSubviews代替viewDidLoad擺脫對我的佈局約束錯誤的

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    VIEWTOFIX.setTranslatesAutoresizingMaskIntoConstraints(true) 
} 

把它: