Как inputAccessoryView получает размер? - PullRequest
0 голосов
/ 05 декабря 2018

Как размер UIResponder.inputAccessoryView контролируется?Это слишком волшебно!

1 Ответ

0 голосов
/ 05 декабря 2018

Это меня давно беспокоило.

С моим опытом и наблюдениями на iOS 12 Simulator, есть два случая,

  1. Без автоМакет.

    UIKit автоматически добавляет ограничение по высоте, и его постоянное значение основывается на размере кадра вспомогательного вида в точке загрузки.Кажется, что ограничения на самом деле переводятся как ограничения автоматического изменения размера.Вы можете найти связанные с высотой константы и фактически изменить их, но так как это детали реализации, делать это не рекомендуется.Я настоятельно рекомендую использовать подход с автоматической компоновкой.

  2. с автоматической компоновкой.

    Если размер не разрешим в точке загрузки вспомогательного вида
    , UIKitЯ собираюсь добавить некоторое явное ограничение ширины / высоты на основе его размера.

    Если эти требования удовлетворены, UIKit просто использует существующие ограничения и ничего не меняет.

    • intrinsicContentSize должны возвращать правильные значения.Если он содержит UIView.noIntrinsicMetric, UIKit добавляет свое собственное ограничение по высоте.

    • Размер вида разрешается системой автоматической компоновки.

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

  3. с автоматическим макетом и UIInputView.allowsSelfSizing.

    По сути то же самое с Auto Layout (# 2), но вам не нужно указывать intrinsicContentSize, если вы установите флаг true.Это более явный вариант.

...