2015-08-19 12 views
5

Nel mio caso particolare ho vista all'interno del controller della vista per il quale ho aggiunto i seguenti vincoli:Come rendere una vista piazza ridimensionare con la sua superview utilizzando layout automatico

  • Set iniziali, finali, bordi superiore e inferiore a 0
  • Set moltiplicatore al bordo inferiore a 2: 1

Ora la vista si trova nella metà superiore sul controller della vista.

All'interno di questo aggiungo una vista quadrato immagine, per cui ho aggiunto i seguenti vincoli:

  • Ctrl trascinate dalla vista sull'immagine per Superview e aggiunti altezze uguali e larghezze.
  • Modificare il moltiplicatore per larghezza e altezza finché non ho un quadrato perfetto.
  • vincoli aggiunto da centro verticalmente e orizzontalmente

I miei vincoli sembra perfetto, ma durante l'esecuzione nel simulatore che non si ottiene un quadrato perfetto. Inoltre, la visualizzazione dell'immagine non viene ridimensionata quando si esegue su schermi di simulatori diversi.

Questa è la mia messa a punto:

  • Auto classi di layout e le dimensioni sono abilitati
  • Io uso un formato derivato per lo storyboard
  • layout di Adaptive è impostato su qualsiasi per la larghezza e l'altezza
  • I sto cercando di eseguire questo per i simulatori 4s, 5,6 e 6+.

Ho cercato altri post StackOverflow, ma niente sembra funzionare.

Esistono alcuni passaggi di base per eseguire questa operazione?

enter image description here

modifica:

Dopo aver impostato> = 10 vincoli:

enter image description here

modifica 3: I aggiunto superiore, inferiore, iniziali, finali vincoli 2 volte, 1 con basso uguale o uguale (priorità 1000), l'altro con maggiore o uguale (priorità 800) con il valore costante di 90. Non so perché per il fondo tenta di passare a 90 pt dalla vista principale, non il contenitore vista (GRE en uno).

enter image description here

+2

si dovrebbe usare un vincolo aspectRatio di 1: 1 sulla vista che si desidera rimanere piazza e poi contengono solo o si tratta di altezza o la larghezza al suo genitore, ma non entrambi. –

+0

quindi è sufficiente impostare le proporzioni di 1: 1 e impostare l'altezza o witdh proporzionale alla superview? In questo modo ottengo un quadrato (che è troppo piccolo) ma non ridimensiona a seconda dello schermo, stessa dimensione su tutti gli schermi – Kobe

risposta

11

Hai una vista che deve espandersi per riempire il suo contenitore mantenendo le sue proporzioni. Questo è un modello comune con Layout automatico.

Il trucco è quello di utilizzare due vincoli per conduzione/posteriore/superiore/inferiore:

  • =10 a bassa priorità

  • >=10 a priorità desiderata.

Mettere tutto insieme, si ha:

  • Aspect Ratio 1: 1

  • Centro X/Y in Superview

  • Leading/Trailing/Alto/Basso Superview = 10 (a priorità 750)

  • Leading/Trailin g/Alto/Basso per Superview> = 10 (a 1000 di priorità)

Ci sono anche un paio di cose da considerare con UIImageView:

  • UIImageView avrà una dimensione di contenuto intrinseco sulla base di l'immagine che sta visualizzando, quindi dovrai assicurarti che la sua priorità di accostamento del contenuto sia inferiore alla priorità 750 che utilizzi per i vincoli =10.

  • UIImageView.contentMode determina come l'immagine sottostante viene ridimensionata rispetto alla dimensione di UIImageView. Per impostazione predefinita, è impostato su UIViewContentModeScaleToFill.

+0

Funziona, ma ho una domanda. Sulla 4s il quadrato sembra troppo piccolo, posso controllarlo in qualche modo? Sulla schermata 6 e 5 le dimensioni sono ok. – Kobe

+0

@Adrian È possibile utilizzare un limite di altezza minimo nella superview dell'immagine. E.g .: altezza = superview.height * 0.5 @ priorità 900, altezza> = 350 @ priorità 1000 – Darren

+0

@darren che ha funzionato grazie. Devo introdurre 1 nuovo vincolo come Img.height = 0.25 x [email protected] per aumentare la dimensione dell'immagine in modo propositivo x 0,25 multiplo mentre l'immagine stava crescendo drasticamente di dimensioni da iPhone 6 a 6 Plus. –

2
container view 
---------------------------------------------- 
|      |      | 
|     >=10     | 
|  imageView |      | 
|  ----------------------------  | 
|  |   |    |  |  
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|- >=10 -|---------- 1:1 -----------|- >=10 -| 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  ----------------------------  | 
|      |      | 
|     >=10     | 
|      |      | 
---------------------------------------------- 

** Se si desidera è possibile specificare l'altezza della ImageView o la larghezza e con un vincolo di priorità inferiore.

+0

Puoi dirmi in che modo si impostano esattamente tali vincoli? Aggiungo solo i vincoli iniziali, finali, inferiori e superiori e scelgo il maggiore o uguale e imposta la costante su 10 o come? – Kobe

+0

Sì, è proprio come dici tu, quindi aggiungi un rapporto 1: 1 all'immagine (cntrl + trascina) l'immagine su se stesso. –

+0

Non funziona per me. Ho allegato uno screenshot per vedere come appare. – Kobe

1

Ho avuto successo utilizzando questa configurazione.

  1. Quello che ho fatto per la prima volta aggiungere vincoli per il centro X. (Ignorare l'unico centro Y anche se è nel mio screenshot. Si romperà indipendentemente a causa del passaggio 2.)

  2. Poi ho aggiunto un vincolo superiore e inferiore

  3. Infine ho aggiunto un vincolo proporzioni

Quando I animato questo, il testo scalato come un quadrato correttamente. Se vuoi, posso caricare il progetto Test.

enter image description here

Problemi correlati