2012-10-19 15 views
5

Nel costruttore di interfaccia posso ottenere un "Vertical Spazio" che corrisponde al spaziatura "standard" da 'pinning':Come impostare la spaziatura standard tra UIViews in codice con layout automatico?

enter image description hereenter image description here

Nel linguaggio vincolo visivo posso fare la stessa cosa con:

V:[top]-[bottom] 

Come si aggiunge la spaziatura standard tra due viste nel codice?

Sto cercando qualcosa di simile che potrebbe apparire in un'UIViewController:

NSLayoutConstraint *spacing = ??? 
[self.view addConstraint spacing]; 
+0

Perché non puoi usare il formato visivo "in codice", o è solo una domanda di curiosità (che per me va bene!) – jrturton

+0

@jrturton, tutti i miei altri vincoli sono in codice. Lo sto facendo perché ho trovato questa affermazione nella documentazione: "Ci sono dei vincoli che non possono essere espressi nella sintassi del formato visivo, anche se la maggior parte dei vincoli che sono utili nelle interfacce utente reali può essere. Un vincolo utile che non può essere espresso è un rapporto di aspetto fisso (ad esempio, imageView.width = 2 * imageView.height). "Finché non so cosa sto facendo e tutte le limitazioni del linguaggio visivo diventano chiare, ho voluto fare tutto prima in codice. –

risposta

2

miscelazione e la congruenza dei vincoli formato visivo e il più prolisso lo stile di creazione di un singolo vincolo (quello a cui penso si riferisce quando si dice "in codice") va bene - in effetti, nel WWDC si parla di layout automatico, l'ordine "preferito" per creare vincoli è stato dichiarato come:

  • Interface Builder
  • formato di Visual
  • stile vincolo singolo

A meno che non necessità la potenza e flessibilità che lo stile unico vincolo ti dà (e ci sono un sacco di posti di formato in cui visiva non funziona, nella mia esperienza fino ad ora), dovresti usare il formato visivo. Sembra che ti stai avvicinando alla lista in alto dal basso verso l'alto, invece che dall'alto in basso.

Se si desidera disporre le viste con spaziatura standard e non si sta utilizzando IB, il formato visivo dovrebbe essere utile. Come dice Rob, non c'è una costante per la spaziatura "standard" disponibile, e stai facendo molto più lavoro per te insistendo su singoli vincoli per tutto.

+0

Alla fine ho optato per uno stile misto di formato visivo con un'eccezione: un vincolo relativo alle dimensioni che non può essere espresso in qualcosa di diverso dal codice. Ciò ha ridotto notevolmente il codice dei vincoli. Buona chiamata –

5

Non ho provato questo:

[self.view addConstraint:[NSLayoutConstraint 
    constraintWithItem:topView 
    attribute:NSLayoutAttributeBottom 
    relatedBy:NSLayoutRelationEqual 
    toItem:bottomView 
    attribute:NSLayoutAttributeTop 
    multiplier:1 
    constant:8]]; 
+5

Non è che basta codificare uno spazio di 8? Penso che OP sia dopo qualche costante di sistema o parola chiave per descrivere la spaziatura standard. – jrturton

+0

@jrturton Non sono riuscito a trovare una costante nei file di intestazione. –

+0

@jrturton, Se c'è una costante di sistema che esprime la spaziatura standard, questa sarebbe una buona opzione. Ma preferirei non usare direttamente il numero 8. –

Problemi correlati