Должно быть ясно, что ваш макет вычисляется с помощью процедуры, которая вызывается в определенное время во время выполнения.
Возможно, вам необходимо изменить текущий макет, например, изменить constant
определенного ограничения. Если вы просто это сделаете, вы не заметите никаких изменений в пользовательском интерфейсе, это связано с тем, что процедура по-прежнему не вызывается.
Что вы можете сделать, это заставить подпрограмму макета называться, и вы делаете, что этими двумя методами:
setNeedsLayout
: Вы говорите, что точка зрения нуждается в макет. В следующий раз, когда подпрограмма вызывается знает, что этот вид нужно иметь макет обновить
layOutIfNeeded()
: Вы не хотите ждать следующего вызова, и вы сообщаете систему, чтобы заставить вычисление макета ASAP
Same вещь случится с setNeedsDisplay()
и displayIfNeeded()
, с первого вы сообщите, что представление нужно снова отобразить, а со вторым вы скажете, как можно скорее.
Если вы спрашиваете себя, почему, причина в производительности. Бесполезно перерисовывать все каждый раз, этот ленивый подход будет экономить системные ресурсы.
Методы - setNeedsUpdateConstraints
10 и -updateConstraintsIfNeeded
- это, по сути, та же концепция, применяемая к ограничениям, разница в том, что вы не увидите никаких изменений в пользовательском интерфейсе, пока не нажмете макет, почему эти методы полезны? потому что иногда вам нужно проверить после изменения ограничения, если макет все еще действителен, не изменяя аспект вашего пользовательского интерфейса.
проверьте это. http://stackoverflow.com/questions/20609206/setneedslayout-vs-setneedsupdateconstraints-and-layoutifneeded-vs-updateconstra –