Le migliori pratiche per la modifica dei vincoli del layout automatico dello storyboard nel codice?

StackOverflow https://stackoverflow.com//questions/21008444

  •  21-12-2019
  •  | 
  •  

Domanda

Ho sempre fatto il mio UIS nel codice, ma ho deciso che dovrei usare storyboards e layout automatico per un progetto attuale. Tutto stava andando bene fino a quando ho costruito una scena complessa con circa 50 visioni con un sacco di gerarchia e qualche griglia di viste.

Il problema è che il mio layout automatico viene confuso su alcuni dispositivi e orientamenti. Lo trovo impegnativo per usare IB per provare a fissare le dozzine (centinaia?) Di vincoli o per rintracciare i problemi e risolverli. La situazione è tale che non ottengo errori o avvertimenti, solo alcuni layout spiacevoli a volte. E IB può essere un dolore con tutti i clic e modificando le impostazioni che devi fare per rintracciare le informazioni sul vincolo, per non parlare di ottenere un'idea completa di come si riferiscono tutti in una scena.

Ho appena trascorso un giorno di lettura di documenti e materiale di fondo sul layout e sui vincoli automatici e sembra che la mia soluzione migliore sia quella di utilizzare il formato visivo per specificare i vincoli nel codice e creare un codice personalizzato per aiutare. Tuttavia, non riesco a trovare nulla su come effettuare la transizione da IB al codice.

In particolare, dovrei pulire tutti i vincoli di IB e farli tutti a mano o è possibile essere selettivi? Chiedo perché ho alcuni gruppi di viste nella visualizzazione contenente le viste in cui le viste del contenuto hanno un layout perfetto.

In secondo luogo, dove meglio metto il mio codice? Voglio coesistere i storyboards e voglio solo modificare selettivamente alcune scene complesse. È un View Controller's Viewwillappear: il posto giusto per modificare o rimuovere / aggiungere vincoli per la vista che controlla?

È stato utile?

Soluzione 2

Scusa per prenderti così tanto tempo per tornare a questo mentre altri progetti si intromettono.

Ho dovuto fare un sacco di refactoring per semplificare le mie scene in modo che il layout automatico possa fare la cosa giusta, eppure non sono pienamente soddisfatto dei risultati. Il problema sembra essere che IB non è facile da usare con molti articoli e che il layout automatico è complicato, per necessità.

Con quello detto, i migliori risultati che ho visto finora sono tratti da questo articolo di Justin Driscoll: http://themainthread.com/blog/2014/02/building-a-universal-app.html

Egli sostenga la costruzione di visualizzazioni personalizzate per incapsulare componenti UI riutilizzabili. Ho preso questo approccio, ma ho esteso l'idea di bundle up componenti correlati che non stanno andando in modo molto diverso come il layout cambia. Ad esempio, ho una barra di avanzamento con pulsante e due etichette, quindi anche se non li sto riutilizzando come gruppo, devono essere adiacenti e concettualmente sono correlati, quindi ho fatto una vista personalizzata per loro che gestisce l'auto Layout come Suggerisce Justin.

Ora sto prendendo l'approccio che ogni livello di layout automatico dovrebbe avere solo una manciata di elementi. Se un livello diventa troppo complesso, accolgoreo alcuni elementi correlati in una vista personalizzata e spingerò un layout automatico all'interno di quella nuova vista. Finora non è troppo brutto.

Altri suggerimenti

Collegare un iBoutlet per NSlayoutConaint che si desidera essere in grado di modificare nel file Storyboard / XIB sul tuo controller / classe di visualizzazione.

Una volta collegato l'oggetto layout, è possibile modificare la proprietà .constant e animare la vista:

[self.containerView layoutIfNeeded]; //make sure all layout operations are done
self.containerViewBottomLayoutConstraint.constant = 200.0; //change the layout
[UIView animateWithDuration:duration animations:^{
    [self.containerView layoutIfNeeded]; //animate the changes
}];
.

Aggiornato: è possibile aggiungere il tuo codice di modifica in ViewDidload, AwakeFromnib, ViewDidaPappear o Event Based.Dipende davvero dalle tue intenzioni.

Layout automatico può essere davvero complicato quando usi molte viste.Ho usato strutture simili complesse complesse e scopro che è meglio cercare di tenere tutti i vincoli nel codice o in Ib.In questo momento li stiamo tenendo in Ib.L'unica volta in cui muoviamo un vincolo nel codice è quando sosteniamo una dimensione dello schermo diversa e dobbiamo modificare un singolo vincolo per la vista per lavorare a destra.Ho sempre modificato i vincoli in viewdid.

Quando qualcosa viene incasinato, ho quasi sempre a nuca tutti i vincoli su quella vista e ricominciare.Succhia, ma è spesso più veloce del monitorare il problema.Una cosa che facciamo questo rende più facile affrontare quel genere di cose è usare .xibs insieme al tuo storyboard.In questo modo, ogni vista può gestire il proprio layout, e puoi tirarlo in una vista che è seduta in uno storyboard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top