2015-12-22 8 views
5

Viene visualizzato un errore divertente quando ignoro alcune visualizzazioni su cui ho alcuni vincoli.Errore interno di layout automatico che si verifica quando una vista viene ignorata

Errore interno di layout automatico. Impossibile trovare la testa di una riga in uscita per la testa in entrata AppName.ViewName: 0x7fc072ed8ef0.Width {ID: 6805} durante l'ottimizzazione della variabile con coefficiente prossimo allo zero, che dovrebbe essere in attesa di .

Sto riscontrando questo errore su diverse viste a cui sto aggiungendo questi vincoli. Una variazione di questo messaggio di errore è la seguente:

Errore interno di layout automatico. Impossibile trovare un capo di riga in uscita per la testa in entrata {id: 6630} durante l'ottimizzazione della variabile con coefficiente prossimo allo zero, che non dovrebbe mai verificarsi.

Qualcuno ha riscontrato problemi simili con questo errore? Qualche consiglio su come eseguirne il debug?

+0

Ciò accade a causa di vincoli insoddisfatti. Devi aggiustarlo come per piombo, altezza e larghezza del sentiero. A volte si completa in 4 avvolgimenti laterali, a parte il tempo soddisfatto da 3 vincoli di avvolgimento laterale. –

+0

Puoi elaborare? "aggiusta quello secondo l'altezza e la larghezza della traccia di piombo". Vuoi dire avere un left right e il vincolo principale? – Unome

+0

hai Vedi il link qui sotto che ti chiarisce un po ', grazie! http://stackoverflow.com/questions/28965610/cannot-find-an-outgoing-row-head-for-incoming-head-uibutton –

risposta

3

Non sono ancora sicuro al 100% perché questo è il modo in cui è, ma la chiave è che si ottiene un coefficiente quasi zero sui vincoli se si hanno numeri interi come i valori dei vincoli per uguale larghezza o altezza.

Ad esempio, non è possibile eseguire valori piatti come 1.2, o 0.8, è necessario fare 0.79999 o 1.199999 o si verificheranno arresti anomali su alcuni dispositivi.

Ho aggiornato tutti i miei vincoli per utilizzare numeri come 0.7999 e ha funzionato.

Vuoi la prova della follia? Mettere questo in un parco giochi:

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) 

I risultati parco giochi poi leggere sorprendente:

0,8 0,79999999 "false"

Craziness, ma questo dimostra esattamente il motivo per cui il bug stava accadendo. Spero che questo ti aiuti.

+0

Non pazzo, il computer dice che esegui tutti i calcoli in binario e non sarà mai impreciso. Dai un'occhiata a: https://en.wikipedia.org/wiki/Machine_epsilon – EricLeaf

Problemi correlati