Различие между этими двумя методами теперь можно описать, ссылаясь на цикл обновления.
Метод setNeedsLayout для UIView сообщает системе, что вы хотите, чтобы она разметила и перерисовала это представление и все его подпредставления. , когда пришло время для цикла обновления. Это асинхронное действие, потому что метод завершается и возвращается немедленно, но только в течение некоторого более позднего времени происходит разметка и перерисовка, и вы не знаете, когда будет этот цикл обновления.
В отличие от этого, метод layoutIfNeeded - это синхронный вызов, который сообщает системе, что вам нужен макет и перерисовка представления и его подпредставлений, и вы хотите, чтобы это было сделано немедленно, без ожидания цикла обновления. Когда вызов этого метода завершен, компоновка уже была скорректирована и прорисована на основе всех изменений, которые были отмечены до вызова метода.
Итак, кратко заявлено, layoutIfNeeded говорит об обновлении немедленно, тогда как setNeedsLayoutговорит, пожалуйста, обновите, но вы можете подождать до следующего цикла обновления.