Автоматически расширять представление документа 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 будет отображаться только с их внутренним размером в верхнем левом углу прокрутки.