Sto cercando di capire come si può utilizzare Auto Layout per posizionare gli elementi rispetto ad altre viste in termini percentuali.Informazioni sul moltiplicatore nel layout automatico per utilizzare il posizionamento relativo
Per esempio, di recente ho imparato che è possibile specificare in basso di una vista dovrebbe trovarsi 4% superiore a quello di fondo del suo superview utilizzando questo:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 0.96, constant: 0))
Questo ha senso per me, perché un moltiplicatore di 1 avrebbe allinearlo proprio sul fondo della vista, in modo da poter ridurre tale importo del 4% modificando il moltiplicatore a 0.96.
Ma come si può fare lo stesso nella direzione opposta? Si desidera specificare la parte superiore di una etichetta dovrebbe iniziare il 4% in giù dalla parte superiore della superview. Se si utilizza la stessa riga ma si cambiano gli attributi in .Top
, ciò significa che sarebbe superiore del 4% rispetto al livello superiore della superview (ma in realtà non lo sposta fuori dallo schermo). Non puoi avere un moltiplicatore negativo che non penso, e non credo che un valore maggiore di 1 faccia qualcosa quando la costante è 0. Quindi, come si ottiene questo set up?
Ho la stessa domanda per l'implementazione di leader e finali. Il trailing è facile. Se si vuole che il 10% da destra:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, attribute: .Trailing, multiplier: 0.9, constant: 0))
ha senso perché si compone indietro 0.1 o il 10%, invece di allineare completamente a 1,0. Ma come fai a fare lo stesso per guidare? Ho pensato che potresti essere in grado di impostare il parente principale dell'etichetta rispetto al trailing della vista, quindi impostare il moltiplicatore su 0.1. Nella mia mente ciò significherebbe che l'etichetta inizierebbe all'estrema destra, ma poi verrà richiamata al 90%, ottenendo così il 10% desiderato da sinistra. Ma non è questo il caso, non sono sicuro del perché.
Puoi spiegare come funziona, come utilizzare correttamente il moltiplicatore per ottenere questi layout relativi?
Per semplificare, diciamo che ti piacerebbe creare un'etichetta che ha il 10% in cima e in basso dell'altezza della superview, e che trascina il 10% della larghezza della superview. Su un iPhone in verticale ci sta per essere più imbottitura sopra e sotto l'etichetta di quanto v'è padding a sinistra e destra di esso, in questo modo (sì, è disegnata in scala):
Ma diciamo che su iPad verrà mostrato in una vista che è un quadrato perfetto. Pertanto l'imbottitura sarà la stessa quantità in tutto, in questo modo:
La domanda è: come si fa a definire tali vincoli essere dinamico in termini di valore, invece di impostare un valore fisso per una costante. So già come fare il bottom e il trailing, ma il top e il leading mi hanno fermato. Spero di capire come utilizzare il moltiplicatore per creare layout più avanzati, ad esempio, specificando che la parte superiore di un'etichetta deve trovarsi al 10% sotto il fondo di un'altra etichetta, anziché impostarla su una costante fissa.
Potete mostrare un diagramma di ciò che si sta cercando di ottenere? – matt
Per questo QA molto vecchio .. l'approccio di base è usare le viste "spacers" o "measurement". Segnali semplicemente come nascosti. Fanno tutti i calcoli per te. – Fattie