Как правильно установить ограничения subview во время инициализации? - PullRequest
0 голосов
/ 20 мая 2019

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

По сути, у меня есть пользовательское представление подкласса UIView, в котором мне нужно указать ограничения, например, чтобы метка всегда была на 10 пунктов выше кнопки.

Подобные ограничения, где я могу их установить? Прямо сейчас я устанавливаю ограничения в функции init, где я вызываю layoutIfNeeded после указания ограничений. Но я также читал, что вы должны установить ограничения в layoutSubviews, но потом я снова где-то читал, что layoutSubviews будет вызываться много раз, поэтому не имеет смысла устанавливать там ограничения.

Также я немного поигрался с макетами-представлениями, я понял, что ограничения, которые я установил в макетах-представлениях, на самом деле вообще не влияют на макет. До сих пор я только успешно устанавливал ограничения с помощью вызова layoutIfNeeded напрямую.

Также мне любопытно, нужно ли мне устанавливать ограничения только один раз или каждый раз, когда что-то обновляется?

Я правильно делаю? Где я должен установить ограничения в моем пользовательском классе?

1 Ответ

0 голосов
/ 20 мая 2019

Установка ограничений каждый раз, когда что-то обновляется (например, внутри LayoutSubviews), отменит ограничения и вызовет массу ненужной работы.Есть большой разговор о WWDC, высокопроизводительное автоматическое расположение.

https://developer.apple.com/videos/play/wwdc2018/220

Но в целом использование Interface Builder избавит вас от самого себя;то есть система будет обрабатывать добавление ограничений в соответствующее время в жизненном цикле представления.

Если вы должны добавить ограничения программно, то добавление их в инициализаторе и вызов layoutIfNeeded () - хорошее решение.

...