2016-10-01 74 views
2

更新我的Xcode 8.0和我的設備上運行我的應用程序後,我注意到,在我的故事板集合視圖就會混亂和框架不再被裝配圖。toolsVersion =「11201」是搞亂我的故事板

如果我打開故事板這只是發生的事情(這似乎Xcode是我第一次打開在Xcode文件後添加一些屬性)。 當我用故事板替換故事板時,不用打開它就可以構建應用程序,一切按預期工作。

經過幾個小時的搜索可能是原因和比較故事板源代碼(在打開它之後的舊故事板和新故事板之間)之後,我發現原因是在故事板頂部找到的toolsVersion屬性源代碼。

 <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" 
    toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" 
    propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" 
    initialViewController="wZn-Em-z41"> 

當我替換toolsVersion="11201" with toolsVersion="10116"然後一切正常工作。

我怎麼能強制工具版本的值?這個屬性是什麼以及它爲什麼會搞亂我的約束和框架。

欣賞有關此問題的任何信息。

+0

我有相同的問題......和調查小時後我來到了有關toolsVersion(10116個做工精細,11201個螺絲了我的表視圖之一)完全相同的結論。似乎是一個Xcode 8錯誤:( –

+0

所以我確定我的問題...我設置我的表視圖的底部contentInset基於圖像視圖的高度由於某種原因,Xcode 8 toolsVersion(11201)導致該圖像查看報告它的大小爲1000 x 1000.我需要深入瞭解圖像視圖出現問題的原因,但這就是爲什麼我的UITableView有太多「內容」。您的問題可能類似嗎? –

+0

看來,新的Xcode 8 toolsVersion(11201)從故事板中刪除了很多引用(似乎是對它們有約束的視圖),所以,如果你依賴框架你的代碼中的任何東西,因爲它不再在故事板中,框架似乎被報告爲1000 x 1000,直到約束有機會被評估爲止。這對你的情況有意義嗎?你是否依賴框架在評估約束之前使用約束的東西?(即在viewDidLoad/viewWillAppear,他們還沒有被評估) –

回答

1

這裏的問題是,隨着toolsVersion 11201(的Xcode 8),似乎具有完全限定的約束條件的觀點不再有在故事板中指定(因爲約束將在運行時確定所述幀)的幀。

所以,你可以不依賴於框架上,直到約束已被評估(即不使用viewDidLoad中或viewWillAppear中幀)。一旦約束條件被評估,框架似乎沒有問題。在他們被評估之前,框架似乎被報告爲1000 x 1000(至少,這是在不同情況下對我的影響)。因此有兩種解決方案:1)制定出口約束條件,並使用該約束條件而不是依賴於框架;或者2)在之後使用框架約束進行了評估(例如,在viewDidAppear方法中)。

+0

或使用'-viewDidLayoutSubviews',注意它可能被多次調用 – qix