2015-03-06 5 views
9

Su iOS, è necessario effettuare chiamate API (come setNeedsLayout o layoutIfNeeded) dopo aver modificato la costante di un vincolo a livello di codice? Nel mio caso d'uso, non sono interessato ad animare il cambiamento. Credo che ci siano alcuni bug (ad es .: this one) in cui chiamare queste funzioni è una soluzione alternativa. Ma a parte questo caso limite non ho avuto bisogno di chiamarli nel mio codice. Funziona per caso o esiste una fonte definitiva che menziona cosa fare quando si cambiano le costanti dei vincoli?setNeedsLayout o layoutIfNecessario necessario dopo aver modificato la costante di vincolo?

Un paio di risposte SO (here e here) dicono che l'impostazione della costante dovrebbe essere sufficiente, ma senza alcun riferimento supplying.

La Guida al layout automatico di Apple per iOS non menziona nulla a riguardo tranne in un animation block. Il Cocoa Auto Layout Release Notes dice che chiamare setNeedsLayout non è necessario se non si sostituisce anche layout nella visualizzazione personalizzata. Tuttavia, quel documento sembra piuttosto specifico per OSX.

risposta

0

Se si desidera ottenere immediatamente il corretto frame of view, è necessario chiamare queste API manualmente. (Ad esempio, ottieni animazione inizio/fine frame) o non è necessario chiamare queste API manualmente.

Uso il framework MASConstraint e non ho mai chiamato queste API.

Non sono sicuro se è necessario quando si aggiunge/rimuove il vincolo ma non si aggiorna il vincolo. :(

0

Sì, è necessario chiamare setNeedsLayout dopo aver cambiato il constant di un vincolo di layout, come questo cambiamento da sola non conta come un'invalidazione del layout.

+0

Purtroppo non sono riuscito a trovare questa informazione nella Gazzetta documentazione ancora. – fabb