2015-04-10 19 views
11

Ho implementato una tastiera personalizzata. Funziona bene su un dispositivo che esegue iOS 8.2.iOS 8.3 'UIView-Encapsulated-Layout-Width' nella tastiera personalizzata

Tuttavia, quando si esegue lo stesso codice su un dispositivo con iOS 8.3 ottengo le seguenti avvertenze e l'altezza della tastiera non è impostato correttamente:

Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>", 
    "<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

Non ho idea di che cosa questo significa. Per favore aiutami a capirlo.

+0

In realtà ho visto questo messaggio su 8.2 dispositivi, nella mia esperienza in realtà indica che il tuo vincolo * è * stato rispettato e la tua altezza è stata impostata correttamente. Hai ancora accesso completo sul tuo dispositivo 8.3? Avete altre visualizzazioni in 'UIInputView' con i vincoli di auto-caricamento? –

+0

@BenPious Purtroppo neanche l'altezza era impostata correttamente. – Neelesh

risposta

3
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>", 
    "<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

Ti sta dicendo che non può soddisfare tutti i vincoli contemporaneamente.

Hai un vincolo <NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>, che detta la larghezza della tastiera è uguale alla larghezza del UIView a 0x15da7b90 meno 320 (controllare il debugger quale questo è, io di solito guardo il debugger GUI se so cosa UIView s potrebbe essere causa del problema).

L'altro vincolo conflitto è <NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>, che determina la larghezza della UIView a 0x15da7b90 (stessa) a 0. Non può soddisfare contemporaneamente questo e quello sopra, quindi si rompe questa.

Vedo che il primo vincolo è uno del tipo NSAutoresizingMaskLayoutConstraint, quindi è possibile provare a impostare setTranslatesAutoresizingMaskIntoConstraints su falso sulla propria vista, che probabilmente rimuoverà il primo vincolo, rimuovendo così il conflitto.

Altra utile documentazione:

0

Ho anche avuto esperienze quando ho creato Keyboard Extension.

che sta che il inputView di UIInputViewController ha UIViewAutoresizingFlexible a parentView di inputView

E il mascheramento viene tradotta in vincolo incapsulato con il nome

<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

Nel vostro log, c'è un altro vincolo tradotto (dal mascheramento), quindi penso che tu lo usi per gestire facilmente le viste. A mio parere, devi usare NSConstraint (larghezza e altezza ...)

Ho provato a rimuovere il mascheramento da inputView, ma mi ha dato molte più difficoltà nella gestione di posizioni e limiti.

Inoltre, ho incontrato questa situazione quando eseguo la tastiera su un'app legacy (non supportata su iPhone 6/6 +).

Ogni volta che ruoto lo schermo, il vincolo sull'altezza viene bloccato con i registri come il tuo.

Se hai un'altra domanda o la mia risposta non è adeguata, dimmelo di nuovo.

+0

Ho già un vincolo di larghezza e altezza. – Neelesh

+0

O aggiungi la vista di automasking per inputView come collectionview? –

0

NSAutoresizingMaskLayoutConstrain significa che non sono stati impostati correttamente i vincoli di layout automatico. Prova a impostarlo correttamente, quindi il tuo problema sarà risolto