16

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

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

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

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

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

NSPopover做类似的事情——前提是内容控制器视图的子视图的约束设置正确,并且各种内容拥抱值足够高(例如,高于隐藏弹出窗口的高约束优先级)。

4

1 回答 1

15

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

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

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

在将文档视图添加到滚动视图之前:

self.scrollView.documentView = self.docView;

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

于 2012-05-30T09:53:06.750 回答