2014-10-07 107 views
0

我正在更新現有應用程序以自動佈局以支持更多設備大小。我有需要和動畫,而不是與約束工作,我將它們設置爲幾個對象:我可以忽略「無法同時滿足約束條件」嗎?

self.secondCounter.translatesAutoresizingMaskIntoConstraints = YES //example 

使用舊SETFRAME方法。

這似乎是工作,但拋出的第一個動畫的運行時錯誤:

無法同時滿足的約束。以下列表中的約束中的至少一個 可能是您不想要的。嘗試 這:(1)看看每個約束,並試圖找出哪些你不期望; (2)找到添加了不需要約束或約束的代碼並對其進行修復。 (注意:如果你看到 NSAutoresizingMaskLayoutConstraints,你不明白,請參閱 到文檔中的UIView財產 translatesAutoresizingMaskIntoConstraints)( 「」, 「」, 「」)

將嘗試恢復通過打破約束

在UIViewAlertForUnsatisfiableConstraints 上設置一個符號斷點,以便在調試器中捕獲此斷點。 中列出的UIView的UIConstraintBasedLayoutDebugging類別中的方法也可能有所幫助。 2014-10-07 19:41:12.903 AppName [5018:1153922]無法同時滿足約束條件。 以下列表中的至少一個約束可能是您不需要的一個 。嘗試這一點:(1)看看每個約束,並嘗試找出你不期望的 ; (2)找到添加了不想要的約束或約束並修復它的代碼。 (注意:如果你看到 NSAutoresizingMaskLayoutConstraints,你不明白,請參閱 到文檔中的UIView財產 translatesAutoresizingMaskIntoConstraints)( 「」, 「」, 「」)

將嘗試恢復通過打破約束

在UIViewAlertForUnsatisfiableConstraints 上設置一個符號斷點,以便在調試器中捕獲此斷點。 中列出的UIView的UIConstraintBasedLayoutDebugging類別中的方法也可能有所幫助。

其實是因爲我沒有設置這個對象的任何約束我沒有得到這個消息,(我聽到的Xcode設置它們每默認情況下,建立在自動佈局XIB每個視圖)。

但不知何故,一切看起來不錯,似乎工作。

我可以忽略此消息嗎?或者稍後我會遇到問題嗎?

回答

3

你會肯定後來遇到問題,需要解決這個問題。如果你不能滿足所有的約束條件,並且運行時校正系統不能「欺騙數字」,它可能會導致你的應用程序崩潰。你可以討厭的消息像這樣的:

Fatal Exception: NSInvalidArgumentException. Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something is nil

爲了解決自動佈局問題,遵循一些簡單的步驟:

  1. 查找違例的佈局視圖。他們將通過視圖控制器的名字黃色或紅色的圖標在右上故事板物體的左側列表:

the yellow icon is your guide...

  • 解決的通過改變框架,約束或添加新約束來解決問題。這些問題本身都有解釋,您可以在這裏找到一個很好的教程:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ResolvingIssues/ResolvingIssues.html
  • 當您解決了所有問題後,請確保測試!在模擬器中使用iPhone 4,5,6和6 Plus尺寸測試您的視圖,如果適用,則使用iPad。此外,請務必在iOS 7和8下進行測試 - iOS 8中的一些自動佈局約定很好,但是iOS 7應用程序崩潰。 (瞭解到硬道路......)
  • 就是這樣!查找,修復,測試:)

    +0

    謝謝澄清。但實際上我並沒有對這個觀點給予任何限制......如果我這樣做,會不會有錯誤? – arnoapp 2014-10-07 18:24:45

    +0

    試圖添加約束但實際上消息是相同的 – arnoapp 2014-10-07 18:31:27

    +0

    啊,自動調整掩碼不需要在運行時轉換爲約束。嘗試禁用它:'[view setTranslatesAutoresizingMaskIntoConstraints:NO];'' – 2014-10-08 01:25:46

    0

    恕我直言,例外是一個紅色的鯡魚。

    約束由蘋果隱式管理。在某些時候,'那裏'的幾行代碼可以間接影響它們,因此很難發現爲什麼你的代碼在這裏提出異常'

    在我的情況下,我發現[cell setHidden:YES]繼續前進,並用[cell removeFromSuperview]替換了該代碼,問題就消失了。

    ....面向對象編程的租戶之一是使APIS安全和易於使用。不容易擦傷和困惑。

    相關問題