2016-04-04 5 views
1

Я знаю, как создавать ограничения автоопределения с классами классов отлично.Обновление ограничений автоопределения с классами размера

Но я не получаю, когда звонить по телефону layOutIfNeeded(), setNeedsDisplay(), layOutSubViews(), setUpdateConstraints().

Может кто-нибудь сказать, как правильно вызвать эту функцию для обновления пользовательского интерфейса после изменения ограничений.

Еще одна моя забота заключается в том, когда вызывать только одну функцию сверху и звонить другим функциям.

+0

проверьте это. http://stackoverflow.com/questions/20609206/setneedslayout-vs-setneedsupdateconstraints-and-layoutifneeded-vs-updateconstra –

ответ

0

Должно быть ясно, что ваш макет вычисляется с помощью процедуры, которая вызывается в определенное время во время выполнения.
Возможно, вам необходимо изменить текущий макет, например, изменить constant определенного ограничения. Если вы просто это сделаете, вы не заметите никаких изменений в пользовательском интерфейсе, это связано с тем, что процедура по-прежнему не вызывается.
Что вы можете сделать, это заставить подпрограмму макета называться, и вы делаете, что этими двумя методами:

  • setNeedsLayout: Вы говорите, что точка зрения нуждается в макет. В следующий раз, когда подпрограмма вызывается знает, что этот вид нужно иметь макет обновить
  • layOutIfNeeded(): Вы не хотите ждать следующего вызова, и вы сообщаете систему, чтобы заставить вычисление макета ASAP

Same вещь случится с setNeedsDisplay() и displayIfNeeded(), с первого вы сообщите, что представление нужно снова отобразить, а со вторым вы скажете, как можно скорее.
Если вы спрашиваете себя, почему, причина в производительности. Бесполезно перерисовывать все каждый раз, этот ленивый подход будет экономить системные ресурсы.
Методы - setNeedsUpdateConstraints10 и -updateConstraintsIfNeeded - это, по сути, та же концепция, применяемая к ограничениям, разница в том, что вы не увидите никаких изменений в пользовательском интерфейсе, пока не нажмете макет, почему эти методы полезны? потому что иногда вам нужно проверить после изменения ограничения, если макет все еще действителен, не изменяя аспект вашего пользовательского интерфейса.

+0

Итак, что было бы правильным, чтобы назвать эти методы. Поскольку я использую autolayout с классами размера и хочу обновлять ограничения и отображать правильно только для этого определенного класса размера. Некоторые из этих методов я должен назвать, в какой последовательности, которые относятся к классам адаптивного размера. – Saggy

+0

Изменить ограничения-> setNeedsLayout-> layOutIfNeeded – Andrea

+0

Прямо сейчас, я вызываю layOutIfNeeded(); он не обновляется должным образом. Итак, мне нужно вызвать setNeedsLayout(), за которым следует layOutIfNeeded()? – Saggy

 Смежные вопросы

  • Нет связанных вопросов^_^