Autolayout: aggiungere un vincolo a superview e non a Top Layout Guide?


112

Ho una UIView nel mio UIViewController nello storyboard a cui voglio aggiungere un vincolo allo spazio che visualizza una distanza dal bordo superiore.

Ora, quando faccio il solito con ctrl + trascinamento nella vista principale del ViewController, ottengo solo l'opzione per impostarlo sulla guida del layout superiore.

Questo è un problema per me perché a un certo punto nell'app ho intenzione di spostare la vista principale verso l'alto di circa 20-50 px e quello che succede è che la vista che ho non si sposterà ... perché non è allineata alla superview.

Come posso farlo manualmente nello storyboard o devo aggiungerlo in modo programmatico?

Sto usando xcode 6.


Puoi trascinare e rilasciare sull'entità corretta nella struttura del documento a sinistra? - Oggetti scena in questo screenshot: ptgmedia.pearsoncmg.com/images/chap5_9780672335761/elementLinks/…
Woodstock

Ho provato anche quello, stesso risultato
Arbitur

Risposte:


306

È presente una freccia a destra del valore della costante del vincolo. Se fai clic su di esso, viene visualizzato un menu in cui puoi scegliere a cosa vuoi applicare il vincolo. Se scegli "Visualizza", verrà bloccato nella parte superiore della vista.

inserisci qui la descrizione dell'immagine


6
Hallelujah! Non sapevo cosa avrei fatto quando hanno rimosso il menu Editor -> Pin.
Jeremy Hicks,

4
non posso credere di non averlo visto prima. Eccezionale.
zumzum

9
Solo una nota per le persone che sono incapaci come me -> potresti non essere in grado di apportare questa modifica a meno che la vista a cui stai aggiungendo il vincolo sia sotto la guida del layout superiore. Avevo una vista sopra la guida al layout superiore e "Guida al layout superiore" non era un'opzione nel menu a discesa. Che è probabilmente una dichiarazione "duh" per i non principianti come me :)
Ryan James

2
Riguarda quelle piccole sottigliezze di Xcode. Questo fa così tanto. :)
Marchy

Solo una rapida precisazione che mi ha confuso: nonostante l'immagine abbia spuntato Top Layout Guide, se vuoi appuntare la vista nella PARTE SUPERIORE della vista come la parte superiore del dispositivo, seleziona "Visualizza".
micnguyen

57

Dovresti essere in grado di farlo evidenziando la vista che desideri nello storyboard e quindi selezionando Editor > Pin > Top Space to Superviewnel menu in alto.


Questo è obsoleto in XCode 7, vedi invece la risposta di @ PaulGurov.


Funziona a
meraviglia

4
Hanno rimosso il "pin" dal menu dell'editor in Xcode 7. Nuove soluzioni?
Kyle G

14

TL; DR: è possibile limitare il margine premendo il Alttasto sulla tastiera.


Si può anche aggiungere che se la vista che si sta tentando di bloccare non è una sottoview diretta della vista a cui si desidera fissarla, l'approccio suggerito non è realmente valido. Supponiamo che la gerarchia della vista sia simile e che tu voglia bloccare la vista dell'immagine ( Parallax Image Viewin questo caso) alla vista del controller della vista ( Viewin questo caso).

inserisci qui la descrizione dell'immagine

Per farlo devi solo Control+ Dragdal Parallax Image Viewa View. Questo presenta le scelte predefinite in cui puoi vedere Vertical Spacing to Top Layout Guideper appuntare la Parallax Image Viewguida al layout superiore.

inserisci qui la descrizione dell'immagine

Quello che vuoi è appuntarlo nella parte superiore (margine) della vista. Per farlo devi passare all'altro insieme di vincoli premendoAlt

inserisci qui la descrizione dell'immagine


Suggerimento molto utile. Questo ha effettivamente risolto il mio problema.
Machado

Per me funziona, ma non so come aggiungere più vincoli contemporaneamente. Ora devo aggiungere uno per uno, per prendere tempo.
Duc Nguyen

3

Avevo già un sacco di vincoli e volevo solo cambiarli piuttosto che infrangerli. Si scopre che se fai doppio clic sul vincolo da modificare, quindi fai clic sull'elemento che ha il ".Margin", puoi semplicemente disattivare il "Relative to Margin" selezionando quell'elemento.

Seleziona il relativo al margine


Questo era quello che stavo cercando quando sono arrivato qui! Grazie
netigger

1

La risposta di Dan funziona. Volevo solo affermare che se imposti la tua visualizzazione in storyBoard su y <20 e configuri i vincoli tramite il pannello pin, verrà impostato in alto su superview:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


0

Se l'altezza della vista è impostata accidentalmente su 0, la guida al layout dallo spazio verticale alla parte superiore NON apparirà. Tuttavia, apparirà la guida al layout dallo spazio verticale al basso, che deve aver avuto senso per qualcuno all'interno di Apple intorno al 2004.


0

Nessuna delle risposte precedenti ha funzionato per me, invece devo fare un trucco per impostare la parte superiore della mia sottoview con la parte superiore di superview invece con la guida al layout superiore.

  • Per prima cosa, imposta il centro della vista secondaria verticalmente con superview.
  • Quindi, modificare i vincoli Centro Y per la vista secondaria e per la superview in Vincolo superiore .

Adesso sei a posto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.