Это меня давно беспокоило.
С моим опытом и наблюдениями на iOS 12 Simulator, есть два случая,
Без автоМакет.
UIKit автоматически добавляет ограничение по высоте, и его постоянное значение основывается на размере кадра вспомогательного вида в точке загрузки.Кажется, что ограничения на самом деле переводятся как ограничения автоматического изменения размера.Вы можете найти связанные с высотой константы и фактически изменить их, но так как это детали реализации, делать это не рекомендуется.Я настоятельно рекомендую использовать подход с автоматической компоновкой.
с автоматической компоновкой.
Если размер не разрешим в точке загрузки вспомогательного вида
, UIKitЯ собираюсь добавить некоторое явное ограничение ширины / высоты на основе его размера.
Если эти требования удовлетворены, UIKit просто использует существующие ограничения и ничего не меняет.
intrinsicContentSize
должны возвращать правильные значения.Если он содержит UIView.noIntrinsicMetric
, UIKit добавляет свое собственное ограничение по высоте.
Размер вида разрешается системой автоматической компоновки.
Asэти ограничения устанавливаются самостоятельно, их можно изменять по своему усмотрению.Кроме того, размер вспомогательного представления будет изменен в соответствии с его содержимым, поэтому это единственный обычный и рекомендуемый способ компоновки вспомогательного представления с динамическим размером.
с автоматическим макетом и UIInputView.allowsSelfSizing
.
По сути то же самое с Auto Layout (# 2), но вам не нужно указывать intrinsicContentSize
, если вы установите флаг true
.Это более явный вариант.