2014-09-19 85 views
25

我有一個項目與XCode 5和iOS 7一起工作得很好,但是當我最近下載XCode 6時,我注意到一些奇怪的行爲與自動佈局。在視圖出現後應用iOS 8/XCode 6自動佈局約束

我有一個視圖的故事板只有一個UIImageView和兩個UILabels。這個視圖使用UiPageViewController加載。 UIImageView在視圖中水平和垂直居中,並且存在限制,指定圖像視圖中兩個標籤的距離。當故事板和自動佈局值發生衝突時(例如,在故事板中,一個標籤在圖像視圖上方20像素,但自動佈局表示它應該在40像素以上),過去,它的自動佈局值是在視圖加載之前成功應用。因此,當視圖第一次顯示時,一切都處於正確的位置。

現在iOS 8/XCode 6中,我看到視圖加載,然後事物跳轉到最終的自動佈局位置。這種跳躍對於模擬器和真實設備中的最終用戶來說是顯而易見的,而且這真的很煩人。有沒有辦法回到過去的行爲?據我所知,沒有代碼已經改變,導致這個問題。

+2

看到我的答案在這裏:http://stackoverflow.com/a/26290775/1342565 – dfickling 2014-10-10 01:58:23

+0

有同樣的問題,非常討厭。它不僅適用於查看控制器,還適用於收集和表格視圖單元格。 – Mikhail 2014-10-21 19:07:52

+0

這是這個問題的重複http://stackoverflow.com/questions/25791183/ios-8-uipageviewcontroller-applying-constraints-after-transitions – kraag22 2015-03-19 14:35:42

回答

9

您的代碼正在對您的約束進行更改的位置在哪裏?

如果你保留在viewWillAppear:你會有這個問題。我發現viewDidLayoutSubviews適用於iOS8,但不一定適用於iOS7。

最後,如果你不能使用viewDidLayoutSubviews,什麼我建議是隱藏的容器視圖viewDidLoad中取消隱藏viewWillAppear中,只有在約束條件已經被應用。在加載屏幕時,它會讓您稍稍延遲,但約束更改對用戶透明。

+3

這是奇怪的事情 - 我沒有改變約束。它們都是在故事板的編譯時指定的。讓我試着隱藏視圖,然後取消隱藏 - 這聽起來像應該起作用。 – wuc 2014-09-19 02:14:42

+3

最後,我最終隱藏了viewDidLoad中視圖中的所有元素,然後在viewDidAppear中隱藏它們。這似乎是iOS 8中的UIPageViewController的一個錯誤,因爲自動佈局在以前版本的iOS中沒有這個問題。 – wuc 2014-09-19 21:51:09

+0

@wuc - 你是如何隱藏所有元素然後取消隱藏的?我很難考慮如何工作。 – CommaToast 2015-04-20 18:06:00

0

我有一個類似的問題,並將項目放入一個容器視圖準備隱藏,然後按照其他答案中的建議顯示它們。

我並不喜歡這種解決方案,最終沒有這樣做。

簡單地把它們放在一個與控制器視圖掛鉤的容器視圖中可以避免這個問題的發生。

0

對我來說,這是我的項目中的標籤欄的問題。我並不需要這個觀點,而是將它隱藏起來。因此,當視圖被推入堆棧時,該欄被隱藏,並相應地調整約束。所以我只是把標籤欄放回去。