Non capisco affatto perché le persone si lamentino del fatto che " Margini provocherebbe un arresto definitivo su qualsiasi cosa prima di iOS 8. "
L'impostazione dei vincoli relativi al margine in un file xib o nello storyboard NON provoca l'arresto anomalo della tua app su iOS7 e NON fa alcuna differenza nell'interfaccia utente sul tuo dispositivo iOS7, purché non tocchi le proprietà UIView.layoutMargins
e UIView.preservesSuperviewLayoutMargins
nel codice.
Cosa sono i margini in iOS8
I margini del layout rappresentano il riempimento all'interno di un UIView
sistema che può essere utilizzato dal sistema di layout durante la creazione di viste secondarie, per garantire che rimanga uno spazio tra il bordo di una vista e una vista secondaria. A questo proposito è molto simile alla proprietà padding associata ai blocchi nei CSS.
Per impostazione predefinita, a UIView
ha margini di layout di 8 punti su ciascun lato e questo non può essere modificato in Interface Builder . Tuttavia, impostando la UIView.layoutMargins
proprietà nel codice, che è disponibile solo su iOS8, è possibile regolare questi valori.
Puoi ottenere IB per visualizzare i margini con Editor> Area di disegno> Mostra rettangoli layout:
I margini possono essere utilizzati per semplificare il layout delle visualizzazioni e delle visualizzazioni secondarie. OgniUIView
margini per impostazione predefinita, ma influiscono solo sul posizionamento della vista quando si imposta un vincolo correlato a un margine.
Come usare i margini
L'unico modo per utilizzare i margini in Interface Builder è verificare l' opzione relativa al margine durante la configurazione dei vincoli. Questo è il modo in cui indirizzi il tuo vincolo all'utilizzo dei margini anziché dei bordi quando definisci la mia vista.
Diamo un'occhiata a quattro diversi modi di impostare un vincolo principale tra una vista e la sua sottoview. Per ogni vincolo che esaminiamo, la prima associazione descritta sarà la guida della sottoview e la seconda sarà la guida della superview . Ciò a cui si desidera prestare particolare attenzione è lo stato di verifica e deselezione dell'opzione Relativo al margine di ciascuna estremità del vincolo, poiché ciò definisce se il vincolo è legato al margine o al bordo della vista.
- Primo elemento (deseleziona), secondo elemento (controllo): in questo caso, stiamo dichiarando che il bordo sinistro della sottoview dovrebbe allinearsi al margine sinistro della superview (come mostrato in questa immagine).
- Primo elemento (deseleziona), secondo elemento (deseleziona): entrambi utilizzano il bordo, non il margine . In questo caso, stiamo dichiarando che il bordo sinistro della sottoview dovrebbe allinearsi al bordo sinistro della superview.
- Primo elemento (spunta), secondo elemento (deseleziona): in questo caso, stiamo dichiarando che il margine sinistro della sottoview dovrebbe allinearsi al bordo sinistro della superview. Questo tipo di layout rende effettivamente la sottoview sovrapposta alla superview.
- Primo elemento (controllo), secondo elemento (controllo). Questo ha effettivamente lo stesso effetto del caso 2, poiché sia la sottoview che la superview hanno lo stesso margine predefinito. Stiamo dichiarando che il margine sinistro della sottoview dovrebbe allinearsi al margine sinistro della superview.
Cosa c'è di buono in Margins
Questa nuova funzionalità (iOS8) influisce sullo sviluppo dell'interfaccia utente solo se si decide di utilizzare i margini.
Utilizzando i margini è possibile regolare il posizionamento di più visualizzazioni secondarie che condividono una relazione comune con una visualizzazione condivisa modificando il valore di una singola proprietà. Questa è una chiara vittoria sull'impostazione di tutti i vincoli associati con valori fissi, perché se è necessario aggiornare tutta la spaziatura, invece di modificare ogni valore uno per uno, è possibile modificare contemporaneamente tutti i posizionamenti rilevanti aggiornando il margine della superview con una singola riga di codice come questo:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
Per illustrare questo vantaggio, nel seguente caso tutti i bordi di sinistra della sottoview sono allineati al margine sinistro della loro superview. Pertanto, la modifica del margine sinistro della superview influirà su tutte le subview contemporaneamente.