...

DispenseAutoLayout (736055 byte)

by user

on
Category: Documents
23

views

Report

Comments

Transcript

DispenseAutoLayout (736055 byte)
Autoresizing e
autolayout
Posizionare gli elementi
All’interno dello storyboard, gli elementi possono essere
posizionati trascinandoli nella posizione desiderata. Il
sistema determina quindi, per ognuno, le relative
coordinate e dimensioni.
Posizionare gli elementi
Le varie View sono strutturate in maniera gerarchica.
 Le coordinate x e y fanno riferimento allo spiazzamento
relativo all’angolo in alto a sinistra del contenitore
 Se due View sono allo stesso livello (sibling), verrà
visualizzata davanti quella che nell’albero si trova più
“in basso”
Supportare schermi differenti
Nello storyboard disponiamo le nostre view con
riferimento al tipo di device attualmente selezionato. E’
però necessario indicare quale dovrà essere il
comportamento di ogni view, per adattarsi a schermi con
risoluzioni differenti. Abbiamo 2 strade:
 Utilizzare l’autoresizing, che permette di specificare
come adattare margini e dimensioni
 Utilizzare l’autolayout, cioè il nuovo sistema di
posizionamento introdotto con iOS6.
Autoresizing
Autoresizing
 Unica soluzione possibile fino alla versione 6
 Più leggero ma meno flessibile: i layout complessi
risultano pertanto più fluidi, ma è più complicato
adattarli a tutte le risoluzioni disponibili.
 Funzionalità limitate rispetto all’autolayout. Se si
vogliono ottenere gli stessi risultati è necessario
intervenire da codice.
Autoresizing
L’immagine mostra la finestra utilizzata per configurare
l’autoresizing.
 A sinistra sono presenti 6 elementi selezionabili che
permettono di indicare come la view dovrà adattarsi
 A destra una schermata che ci aiuta a capire se il
risultato che si otterrà coincide con quello desiderato
Autoresizing
 Gli elementi più esterni indicano quali margini dovranno
rimanere costanti
 In caso di conflitto la priorità viene assegnata al
margine sinistro (in caso di conflitto sui margini
orizzontali) ed a quello superiore (in caso di conflitto su
quelli verticali)
Autoresizing
 Le frecce interne indicano rispetto a quali dimensioni
(altezza, larghezza o entrambe) la dimensione la view
dovrà adattarsi proporzionalmente
 Ad esempio, se è selezionata l’altezza, al raddoppiare
dell’altezza dello schermo, raddoppierà anche quella
della view
Autoresizing
 L’esempio in questione permette di indicare che la view
dovrà mantenere inalterati sia il margine destro che
quello sinistro.
 In questo caso l’incremento della larghezza non sarà
proporzionale, ma dipenderà dal margine sinistro
Autoresizing
 Se non si specificano margini, la dimensione rimarrà
inalterata, mentre la posizione sarà adattata
proporzionalmente.
Autolayout
Autolayout
Sebbene l’autoresizing sia un meccanismo utile e
versatile, non è in grado di soddisfare con semplicità tutte
le possibili esigenze:
 Necessità di imporri vincoli di posizionamento fra due
view (Es: la distanza fra 2 view deve essere di 10 pixel)
 Necessità di indicare dimensioni proporzionali (Es: una
view deve essere il doppio dell’altra).
Autolayout
L’autolayout utilizza dei vincoli, denominati constraint, che
permettono di indicare delle regole che devono essere
rispettate dalle view. Tali vincoli possono essere relativi a:
 Proprietà di una view: è ad esempio possibile imporre
la dimensione esatta dell’altezza.
 Due view: è possibile specificare, ad esempio, la
distanza fra il margine destro di ua view ed il sinistro di
un’altra
 Una view ed il proprio container
Autolayout
All’interno dello storyboard sono presenti 3 pulsanti che
permettono di visualizzare e specificare i costraint relativi
alla view correntemente selezionata.
Constraint di allineamento
I constraint presenti nella prima
finestra sono relativi
all’allineamento della view. I più
utilizzati sono gli ultimi 2, che
permettono di centrare la view
orizzontalmente o verticalmente
nel container
E’ possibile specificare un offset
in pixel (la view non sarà quindi
centrata, ma avrà uno
spiazzamento rispetto al centro).
Constraint relativi alla view
II secondo menù contiene i
contraints relativi alle proprietà
della view, quindi principalmente
margini e dimensioni.
Selezionando un margine è
possibile specificare rispetto a
quale altra view deve essere
riferito.
Constraint relativi alla view
L’ultimo menù permette di effettuare
operazioni di carattere generale:
 aggiornare la visualizzazione in
base ai nuovi constraint aggiunti.
 rimuovere tutti i constraint relativi
ad una view/viewcontroller
 Aggiungere automaticamente i
constraint mancanti (decidendo
autonomamente come impostarli).
CTRL + Drag
Nonostante quanto appena
osservato, il modo più semplice per
aggiungere dei nuovi constraint è
sicuramente la combinazione
CTRL + Drag, cioè effettuare un
trascinamente tenendo premuto il
tasto CTRL.
CTRL + Drag
Questa combinazione aprirà una
nuova finestra contenente tutti i
possibili constraint che possono
essere specificati, relativamente
alle due view in questione.
 Horizontal/Vertical Spacing:
indicano la distanza
orizzontale/verticale fra le due
view.
Allineamenti relativi
 Top, Left, Right, Bottom:
specificano come allineare i
corrispondenti margini. E’
possibile, ad esempio,
specificare che i margini
superiori delle due view
dovranno coincidere.
 Center X/Y : Indicano che il
centro orizzontale/verticale delle
due view dovrà coincidere
In entrambi i casi è possibile
indicare un offset
Rapporto fra le proporzioni
 Equal Widths/Height: Indicano
che le dimensioni dovranno
essere uguali o proporzionali.
 Aspect ratio: relativo al rapporto
larghezza/altezza delle view
Violazione di vincoli
 In alcune situazioni possono
verificarsi degli errori perchè
alcuni constraint sono assenti
o vanno in conflitto fra loro.
 Quando possibile il sistema
risolve automaticamente i
problemi, segnalando
comunque un warning.
 In tutti gli altri casi sarà
prodotto un errore di
compilazione che dovremo
gestire.
Proprietà dei constraint
Tutti i constraint possiedono le seguenti proprietà:
 Constant : indica il valore del constraint, che sarà
interpretato dal sistema in base al corrispondente tipo.
L’operatore permette di indicare il tipo di vincolo (uguale,
maggiore, minore, ecc.).
 Priority : Se = 1000, il constraint è obbligatorio. Altrimenti
serve per specificare la priorità fra più constraint in caso di
conflitto.
 Multiplier : In caso di dimensioni proporzionali indica il
rapporto fra esse.
Outlets per i constraint
Anche ai constraint, come aqualsiasi altro elemento
grafico, è possibile associare un outlet, che servirà per
modificarlo a runtime da codice.
Fly UP