Ho diversi UIView
s disposti lungo la parte inferiore di una contenente UIView
. Voglio che queste viste siano sempre di uguale larghezza e tendano sempre a riempire collettivamente la larghezza della vista contenente (come i pulsanti della tastiera emoji in basso). Il modo in cui sto avvicinando è impostare larghezze uguali a una delle viste, quindi solo aggiornare il vincolo di larghezza che guarda essere superviewWidth/numberOfViews
che causerà tutte le altre viste per aggiornare a tale valore stesso.Dove aggiornare i vincoli di Autolayout quando le dimensioni cambiano?
Mi chiedo dove il codice per modificare il vincolo bisogni costanti per andare. Deve essere impostato prima che la tastiera venga visualizzata sullo schermo per la prima volta e aggiornata quando si ruota il dispositivo.
Il mio primo tentativo di soluzione è stato inserirlo in updateViewConstraints
e calcolare la larghezza tramite containerView.frame.size.width
. Ma questo metodo viene chiamato due volte al caricamento, la prima volta che calcola i valori correttamente, ma la seconda volta per qualche motivo la larghezza dello containerView
è 0.0. Un altro problema è che quando si ruota, la larghezza dello containerView
non è il valore che sarà dopo la rotazione, è il valore corrente prima della rotazione. Ma non voglio aspettare fino a dopo che la rotazione è stata completata per aggiornare il vincolo, perché i pulsanti saranno la dimensione originale, quindi cambierà il che sarà stridente per l'utente.
La mia domanda è: dove è il posto più adatto per mettere questo codice? C'è un modo migliore per calcolare quale sarà la larghezza? Posso garantire che sarà sempre la stessa larghezza della larghezza dello schermo. E sto usando le classi di dimensioni in Xcode 6, quindi willRotateToInterfaceOrientation
e metodi simili sono deprecati.
Grazie per aver suggerito una soluzione migliore! Funzionando meravigliosamente – Joey