Автоматически расширять представление документа NSScrollView с помощью автоматической компоновки?

Есть ли простой способ заставить NSScrollView адаптироваться к его размеру документа, изменяя размер при использовании автоматического макета?

Я попытался вызвать как setNeedsUpdateConstraints:, так и setNeedsLayout: в представлении документа, виде клипа и просмотре прокрутки без каких-либо результатов.

fittingSize в представлении документа отображается правильный размер.

Проблема заключается в том, что просмотр документа, который хранит subviews, не изменяется, когда субвью меняет свой размер, даже если они вызывают invalidateIntrinsicContentSize. Таким образом, содержимое представления документа обрезается до исходного размера представления документа по мере его роста. Представление документа создается в банке и устанавливается как просмотр документа просмотра прокрутки в методе awakeFromBib.

Я надеялся, что рамка просмотра документа будет автоматически отрегулирована, когда изменится ее fittingSize, и соответственно изменится полоса прокрутки.

NSPopover делает что-то подобное - при условии, что в представлениях представления контроллера содержимого есть ограничения, установленные правильно, и различные значения обнимания содержимого достаточно высоки (выше, чем приоритет ограничения скрытого приоритета окна для каждого окна).

Ответы

Ответ 1

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

Итак, ответ на мой собственный вопрос прост, просто используйте:

// Assume self.docView is an IBOutlet populated with
// an NSView subclass
self.docView.translatesAutoresizingMaskIntoConstraints = NO;

прежде чем добавлять представление документа в режим прокрутки:

self.scrollView.documentView = self.docView;

Теперь, поскольку автоматические сгенерированные ограничения в макете представления документа в представлении клипа, вам нужно будет добавить их явно. В противном случае содержимое представления doc будет отображаться только с их внутренним размером в верхнем левом углу прокрутки.