Mi sembra che sia un paradigma abbastanza comune mostrare / nascondere UIViews
, il più delle volte UILabels
, a seconda della logica aziendale. La mia domanda è: qual è il modo migliore usando AutoLayout per rispondere alle viste nascoste come se il loro frame fosse 0x0. Ecco un esempio di un elenco dinamico di 1-3 funzioni.
In questo momento ho uno spazio superiore di 10px dal pulsante all'ultima etichetta, che ovviamente non scivolerà verso l'alto quando l'etichetta è nascosta. A partire da ora ho creato uno sbocco a questo vincolo e modificando la costante a seconda di quante etichette sto visualizzando. Questo è ovviamente un po 'confuso dal momento che sto usando valori di costante negativi per spingere il pulsante verso l'alto sui frame nascosti. È anche negativo perché non è vincolato a elementi di layout reali, solo calcoli statici subdoli basati su altezze / imbottiture note di altri elementi e ovviamente combattendo contro ciò per cui AutoLayout è stato costruito.
Potrei ovviamente creare nuovi vincoli a seconda delle mie etichette dinamiche, ma questo è un sacco di microgestione e molta verbosità per aver provato a far crollare un po 'di spazio. Ci sono approcci migliori? Cambiare la dimensione del frame 0,0 e lasciare che AutoLayout faccia la sua cosa senza manipolazione dei vincoli? Rimozione completa delle viste?
Onestamente, tuttavia, la modifica della costante dal contesto della vista nascosta richiede una singola riga di codice con un semplice calcolo. Ricreare nuovi vincoli con constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
sembra così pesante.
Modifica febbraio 2018 : vedi la risposta di Ben con UIStackView
s