Я играю с виджетом списка сегодня (macOS) и использую автомакет для изменения размера виджета. Этот виджет содержит пользовательский NSView, отображающий некоторый предварительно отформатированный текст (почти как HTML-тег pre
).
В зависимости от отображаемого текста виджет имеет собственный размер содержимого. Он также правильно масштабируется (вниз или вверх) и центрируется, если установленный кадр больше или меньше собственного размера.
Обычно это хорошо работает во многих сценариях, кроме одного. При отображении в виде виджета «Сегодня» ширина виджета ограничена определенным размером. Это нормально, даже если внутренний размер больше доступной ширины, он уменьшится. Однако кажется, что автомакет по-прежнему использует внутреннюю высоту виджета как есть, несмотря на то, что ширина была ограничена. Таким образом, мой вид выглядит дополненным по высоте, например:
/------------------\
| extra pad |
|------------------|
| |
| downsized view |
| |
|------------------|
| extra pad |
\------------------/
Пример: внутренний размер визуализируемого представления 800x400, ширина текущего представления 400. Вид уменьшен до 400x200, но высота макета по-прежнему кажется исходной 400 (200 отступов сверху и снизу).
Вопрос: как мне указать autolayout учитывать масштабирование. Звучит почти так, как будто потребуется что-то вроде -intrinsicSizeForMaxSize:.
Я попытался установить ограничение соотношения ширины и высоты, уменьшить сопротивление сжатию и увеличить приоритет объятий, но это не убивает дополнительные отступы. Я думаю, что мне что-то не хватает в том, как autolayout учитывает внутренний размер, когда он переполняется.