使用自动布局时,是否有一种简单的方法可让NSScrollView
适应其文档视图更改大小?
我试图在文档视图,剪辑视图和滚动视图上同时调用setNeedsUpdateConstraints:
和setNeedsLayout:
,但没有任何结果。
fittingSize
文档视图报告的大小正确。
问题是,当子视图更改其大小时,即使他们调用invalidateIntrinsicContentSize
,也不会重新调整包含子视图的文档视图的大小。因此,文档视图的内容在它们增长时被剪切为文档视图的原始大小。文档视图在笔尖中创建,并在awakeFromBib
方法中设置为滚动视图的文档视图。
我希望在fittingSize
更改时自动调整文档视图框,并相应地更新滚动条。
NSPopover
执行类似的操作 - 前提是内容控制器视图的子视图设置了正确的约束,并且各种内容拥抱值足够高(高于隐藏的弹出窗口的高约束优先级,对于一个)。 / p>
答案 0 :(得分:15)
问题当然是在添加文档视图时,Cocoa会在文档视图插入的视图中自动创建一些硬约束,即剪辑视图。
所以我自己的问题的答案很简单,只需使用:
// Assume self.docView is an IBOutlet populated with
// an NSView subclass
self.docView.translatesAutoresizingMaskIntoConstraints = NO;
在将文档视图添加到滚动视图之前:
self.scrollView.documentView = self.docView;
现在,由于剪辑视图中的文档视图布局没有自动生成的约束,因此您需要显式添加它们。否则,doc视图的内容将在滚动视图的左上角以其固有大小呈现。