Sobes.tech
Junior — Middle

Ar galima keisti AutoLayout programoje iš kitos vykdymo srauto?

sobes.tech AI

Atsakymas iš AI

Negalima keisti AutoLayout (pavyzdžiui, atnaujinti apribojimus) iš kitos vykdymo srauto. Visus vartotojo sąsajos pakeitimus, įskaitant darbą su AutoLayout, turi atlikti pagrindinis srautas (main thread).

Jei bandysite keisti apribojimus iš foninio srauto, tai gali sukelti nenuspėjamą elgesį, avarijas ar vizualinius artefaktus.

Tinkamiausias būdas yra pereiti į pagrindinį srautą prieš keičiant AutoLayout:

DispatchQueue.main.async {
    // apribojimų atnaujinimas
    viewConstraint.constant = 20
    view.layoutIfNeeded()
}

Taip užtikrinama saugumas ir teisingumas atnaujinant sąsają.