Ответ 1
Причина, по которой он не изменяет размер, чтобы заполнить свой новый супервизор, заключается в том, что вы не договорились об этом. Короче говоря, вам нужно добавить ограничения в коде, чтобы связать два представления после добавления одного к другому.
Скорее всего, IB установил представление, чтобы перевести его маску авторезистировки на ограничения. Какую маску авторезистирования трудно определить из NIB, когда она настроена на использование автоматического макета.
В любом случае, когда вы добавляете его в супервизор, автоматически создаваемые ограничения сохраняют текущий кадр. Когда размер супервизора изменяется, они изменяют его по маске авторезистировки (возможно, позволяя изменять ширину и высоту, но не расстояние до границ супервизора).
Когда вы используете автоматический макет, вы должны сделать следующее:
-
Отключить
translatesAutoresizingMaskIntoConstraints
в NIB или отключить его в коде, который добавит его в супервизор. Какой из этих подходов вы используете, зависит от того, будете ли вы ожидать, что представление будет когда-либо добавлено в качестве подчиненного класса представления структуры, который управляет макетом своих подзонов. Если возможно, вы должны оставить его в NIB и позволить этому классу решить, отключать ли его. -
После добавления представления в его супервизор добавьте ограничения на супервизор, который контролирует, где должно быть выложено представление.