2015-10-05 16 views
6

Quello che sto cercando di realizzare

Voglio avere due punti di vista di uguale altezza disposti verticalmente per tutte le altezze regolari. Tuttavia, per Compact Heights voglio avere le viste disposte orizzontalmente. Questo è illustrato nella figura seguente:Come risolvere mancanti/vincoli contrastanti per Wäny Hany quando si utilizza diverse classi dimensionali

enter image description here

Per fare questo, ho aggiunto i vincoli generali nella classe dimensionale Wäny-Hany che si applicano a tutto. Quindi ho aggiunto vincoli specifici per le classi di dimensione wAny-hRegular e wAny-hCompact. Questo ha funzionato bene per wAny-hRegular e wAny-hCompact (e per testare l'app nel simulatore), ma mi ha lasciato con i vincoli mancanti in wAny-hAny. Se aggiungo questi vincoli mancanti in wAny-hAny allora ottengo vincoli in conflitto in wAny-hRegular o wAny-hCompact. Non so come sbarazzarmi degli errori.

Di seguito è una spiegazione più dettagliata di esattamente quello che ho fatto.

Come ho tentato di farlo

sono stato in grado di ottenere qualcosa che funziona nel simulatore effettuando le seguenti operazioni.

Wäny Hany

enter image description here

per qualsiasi larghezza di Qualsiasi Altezza ho impostato i seguenti 4 vincoli:

enter image description here

Cioè, ho appuntato blu verso l'alto ea sinistra e Ho appuntato il rosso a destra e in basso. Non importa quale classe di dimensioni sia utilizzata, questi vincoli sono sempre necessari.

Wäny hRegular

enter image description here

per qualsiasi larghezza di regolare altezza ho aggiunto i seguenti 4 vincoli:

enter image description here

Cioè, ho appuntato blu a destra e rosso a la sinistra. Ho anche bloccato il bordo superiore del rosso al bordo inferiore del blu. E ho fatto le altezze rosse e blu uguali. Questo risolve tutti i problemi di vincoli per l'altezza normale.

Wäny hCompact

enter image description here

per qualsiasi larghezza di Compact Altezza ho aggiunto i seguenti 4 vincoli:

enter image description here

Cioè, ho appuntato blu verso il basso e il rosso a la cima. Ho anche bloccato il bordo destro del rosso al bordo sinistro del blu. E ho fatto le larghezze rosse e blu uguali. Che si prende cura di tutti i problemi di vincoli per Compact Height.

Il problema

Con l'impostazione sopra tutto funziona come dovrebbe nell'anteprima Storyboard (vedi prima immagine sopra) e nel simulatore per tutti i formati che ho testato.

Tuttavia, l'Interface Builder sto ottenendo i seguenti errori di vincolo mancanti per la dimensione della classe Wäny Hany:

enter image description here

Questo è un po 'di una cattura-22, perché se provo ad aggiungere i vincoli mancanti, quindi, creo vincoli in conflitto con i vincoli delle classi di dimensioni normali o compatte. Ecco il Compact come esempio:

enter image description here

Come posso risolvere questo problema?

risposta

5

Penso che sia necessario aggiungere vincoli specifici solo per le classi di dimensione wAny-hCompact. E assicurati che i vincoli speciali siano installati correttamente.

Vedere l'immagine qui sotto.

enter image description here

+1

Hai ragione. Ho solo bisogno di impostare tutti i vincoli in AnyAny, quindi aggiungere i vincoli speciali in AnyCompact. Successivamente, disinstallo i vincoli in conflitto in AnyCompact. Per disinstallare i vincoli, ho dovuto studiare più la risposta di @ AkshaySunderwani (cioè la documentazione). Non potevo semplicemente deselezionare 'installato' perché lo disinstalleremmo per ogni classe di dimensione. Ho dovuto aggiungere la classe di dimensione specifica (AnyCompact) nella finestra di ispezione dei vincoli e quindi disinstallarla. – Suragch

4

Questo perché esistono due diversi tipi di vincoli per la visualizzazione singola in due classi di dimensioni diverse. Quindi, risolvendo il problema dei vincoli mancanti/in conflitto per wAny hAny quando si utilizzano classi di dimensioni diverse, provare a disinstallare il vincolo aggiuntivo da wAny hAny size class, che sono stati aggiunti in wAny hCompact o in qualsiasi altra classe di dimensione.

È possibile farlo in questo modo:

Passi:

  1. Se l'area di utilità non è aperto, scegliere Visualizza> Utility> Mostra Utilities.
  2. Selezionare la vista contenente il vincolo che si desidera modificare.
  3. Selezionare il vincolo che si desidera installare o disinstallare. L'ispettore Vincolo si apre nell'area delle utilità.
  4. Nella finestra di ispezione dei vincoli, fare clic sul pulsante Aggiungi (+) accanto alla proprietà Installato e scegliere la classe di dimensioni desiderate dal menu a comparsa.

enter image description here

Dopo aver scelto una classe dimensione dal menu a comparsa, un nuovo elemento di entrata per quella classe dimensionale appare nella finestra di ispezione vincolo.

enter image description here

Nota: Se esiste già una voce voce esistente per la classe dimensione desiderata, saltare questo passaggio.

  1. Selezionare la casella di controllo per la riga di introduzione desiderata per installare il vincolo per tale classe di dimensione. Deseleziona la casella di controllo per disinstallare il vincolo.

Un oggetto di runtime per un vincolo disinstallato viene ancora creato. Tuttavia, non è incluso nella gerarchia della vista.

L'ispettore di vincoli mostra uno o più elementi di immissione che mostrano se il vincolo è o non è installato per una classe di dimensioni. Ogni riga di introduzione per una classe di dimensione inizia con un pulsante Elimina (x) seguito dalla classe di dimensioni e quindi una casella di selezione. La classe dimensionale è mostrata per la larghezza (w) e l'altezza (h).C viene utilizzato per la classe di dimensioni compatte, R per la classe di dimensione normale e Qualsiasi per qualsiasi classe di dimensione.

È possibile trovare una spiegazione dettagliata su questo apple document on installing and uninstalling constraint for size classes.

1

Tutto ciò che serve può essere raggiunto facilmente con l'aiuto di UIStackView che è disponibile da Xcode 7 e superiori.

Apple Documentation of UIStackView

A good Tutorial on UIStackView

+0

Questi sono alcuni buoni collegamenti per 'UIStackView' e sarebbe molto facile rendere il layout verticale o orizzontale individualmente. Tuttavia, non è immediatamente evidente come la vista dello stack cambi automaticamente da verticale a orizzontale (o viceversa) in base alle dimensioni e all'orientamento del dispositivo. Potresti compilare la tua risposta un po 'di più? – Suragch