2015-12-22 45 views
5

當我忽略某些視圖時出現了一些有趣的錯誤,這些視圖對我有一些限制。視圖關閉時發生自動佈局內部錯誤

自動佈局內部錯誤。在 期間無法找到 傳入的頭部AppName.ViewName:0x7fc072ed8ef0.Width {id:6805}期間的出局行頭優化近零係數的變量,應該不會發生 。

我收到這個錯誤,我添加了這些約束的幾個視圖。此錯誤消息的一個變體如下:

自動佈局內部錯誤。 在優化 變量時,找不到輸出頭{{:6630})的輸出行頭,這個變量幾乎不會發生。

有沒有人遇到類似的問題,這個錯誤?有關如何調試它的任何提示?

+0

這是由於未滿足的限制條件。您必須根據鉛,線索的高度和寬度來修復該問題。有時它在4個側面包裝中完成,而其它3個側面包裹約束滿足。 –

+0

你能詳細說明一下嗎? 「根據引線的高度和寬度來修復」。你的意思是有一個左右和頂部的約束? – Unome

+0

海看到下面的鏈接它澄清你有點清楚,謝謝! http://stackoverflow.com/questions/28965610/cannot-find-an-outgoing-row-head-for-incoming-head-uibutton –

回答

3

我仍然不是100%確定這是爲什麼它是這樣,但關鍵是如果您將整數作爲等寬或高的約束值,那麼您的約束係數就接近零。

例如,你不能做像1.2或0.8這樣的扁平值,你需要做0.79999或1.199999,否則你將在某些設備上崩潰。

我更新了所有的約束條件,使用0.7999等數字,並且工作正常。

想要證明瘋狂嗎?將這個在操場:

let a: Double = 0.8 
let b: Double = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 
print(a == b) 

操場結果然後讀驚人:

0.8 0.79999999 「假」

瘋狂,不過這正好說明了爲什麼錯誤發生了什麼。希望這可以幫助。

+0

不是瘋狂的,電腦說做你所有的二進制數學,它永遠不會是不準確的。看看:https://en.wikipedia.org/wiki/Machine_epsilon – EricLeaf