使用自动布局自动增长NSScrollView的文档视图?

时间:2012-05-29 20:03:58

标签: cocoa resize nsscrollview autolayout

使用自动布局时,是否有一种简单的方法可让NSScrollView适应其文档视图更改大小?

我试图在文档视图,剪辑视图和滚动视图上同时调用setNeedsUpdateConstraints:setNeedsLayout:,但没有任何结果。

fittingSize文档视图报告的大小正确。

问题是,当子视图更改其大小时,即使他们调用invalidateIntrinsicContentSize,也不会重新调整包含子视图的文档视图的大小。因此,文档视图的内容在它们增长时被剪切为文档视图的原始大小。文档视图在笔尖中创建,并在awakeFromBib方法中设置为滚动视图的文档视图。

我希望在fittingSize更改时自动调整文档视图框,并相应地更新滚动条。

NSPopover执行类似的操作 - 前提是内容控制器视图的子视图设置了正确的约束,并且各种内容拥抱值足够高(高于隐藏的弹出窗口的高约束优先级,对于一个)。 / p>

1 个答案:

答案 0 :(得分:15)

问题当然是在添加文档视图时,Cocoa会在文档视图插入的视图中自动创建一些硬约束,即剪辑视图。

所以我自己的问题的答案很简单,只需使用:

// Assume self.docView is an IBOutlet populated with
// an NSView subclass
self.docView.translatesAutoresizingMaskIntoConstraints = NO;
在将文档视图添加到滚动视图之前

self.scrollView.documentView = self.docView;

现在,由于剪辑视图中的文档视图布局没有自动生成的约束,因此您需要显式添加它们。否则,doc视图的内容将在滚动视图的左上角以其固有大小呈现。