Я изучаю, как работает Auto layout в iOS. Для этого я создал пример приложения с одним представлением, которое имеет один контроллер представления (который является исходным контроллером представления) и одно пользовательское представление (назовем его образцом представления). Я добавил образец представления в контроллер представления в Main.storyboard с ограничениями автоматического макета. Я добавил кнопку и метку в Sample View с ограничениями автоматического макета. Я переопределяю метод layoutSubviews и updateConstraints в SampleView.m. Эти переопределенные методы ничего не делают, кроме как вызывают свою суперреализацию. Я добавил точку останова к обоим этим методам и начал отлаживать приложение. Ниже приведены мои наблюдения
Я обнаружил, что updateConstraints вызывается перед методом layoutSubviews в SampleView. Однако я прочитал несколько сообщений/ответов, где упоминается, что layoutSubviews вызывается перед updateConstraints. Теперь я в замешательстве, каков правильный механизм? вызывается ли updateConstraint перед layoutSubviews или наоборот. Как работает система автоматической разметки?
Когда я поворачиваю устройство с портретной на альбомную или с альбомной на портретную, я обнаружил, что метод updateConstraints SampleView не вызывается автоматически (однако метод layoutSubviews вызывается автоматически), в то время как я прочитал несколько сообщений/ответов, в которых говорится, что при вращении Метод updateConstraints вызывается автоматически. Я снова запутался, что из этого правда?
Если метод updateConstrains не вызывается автоматически при изменении ориентации, то как мы можем вызвать метод updateConstraint для всех представлений в иерархии представлений при изменении ориентации? Будет ли вызов setNeedsUpdateConstraint для большинства родительских представлений вызывать updateConstraint для всех дочерних представлений этого представления?