В чем разница между внутренними размерами и ограничениями ширины/высоты системы?

Начнем с перехода от пружин и компоновки макетов к авто макету и зададим некоторые вопросы относительно параметра "Внутренний размер" .

Если вы установите "Внутренний размер" некоторого вида на "Заполнитель" и поместите некоторые значения ширины и высоты, представление не будет масштабироваться и останется фиксированным. Но если мы установим "Внутренний размер" на "Default (System defined)", тогда система решит и масштабирует представление, если это необходимо во время выполнения.

Однако мы могли бы явно задать ограничения ширины и высоты для представления с помощью Ctrl + Drag. В этом случае должны быть ограничения ширины и высоты системы и константные значения константы. Я просматриваю существующий код и пытаюсь понять, что это ошибка, и избыточные ограничения ширины и высоты системы должны быть удалены ИЛИ есть какая-то другая скрытая логика. Однако Xcode не показывает никаких предупреждений и т.д. В консоли во время выполнения. Вот экран печати демонстрационного проекта:

enter image description here

Ответ 1

Когда вы устанавливаете внутренний размер на "Placeholder", вы указываете системе макета Xcode, что ваше представление будет иметь размер, зависящий от его содержимого (например, ярлык может зависеть от его текстового содержимого). Система знает и поддерживает только собственные типы представлений с внутренним размером. Если вы хотите иметь аналогичный опыт с точки зрения своего собственного, рассмотреть мнение так, как если бы он имел внутренний размер. Затем вы настраиваете свои ограничения, как будто представление должно увеличиваться или уменьшаться в зависимости от его содержимого. Наконец, вы реализуете метод intrinsicContentSize для вычисления и возврата правильного размера содержимого. Если изменение содержимого и новый расчет должны быть выполнены, вы вызываете invalidateIntrinsicContentSize в своем представлении. В зависимости от того, как вы настроили свои ограничения, ваше представление будет либо расти, либо сокращаться, либо оно будет статичным (например, вы можете установить ограничения на ширину и высоту на ярлыке и оставаться статическими). ​​

Ответ 2

если вы знакомы с wrap_content с android, intrinsicContentSize совпадает с wrap_content.

Ответ 3

Каждое представление, содержащее контент, может вычислять его собственный размер содержимого. Внутренний размер содержимого вычисляется методом на каждом экземпляре UIView. Этот метод возвращает экземпляр CGSize