2

我试图找到使用 Lion 的自动布局的最佳方法来制作这个简单的窗口,其中包含一个可滚动的视图,其中包含一个居中的图像和一个边框。看看我很棒的 ascii 艺术:

+==============+
|             ||
|    XXXXXX   ||
|    XXXXXX   ||
|    XXXXXX   ||
|              |
+--------------+

NSScrollView 的文档视图是一个翻转的 NSView 子类,它绘制背景图案,并在其中添加用户选择的图像(即不确定大小)。添加图像视图时,我给它约束以使其在文档视图中居中。文档视图本身受到约束,表示它希望比加载的图像略大。我想要的是明显的行为:在加载大于 scollview 的图像时,滚动条变为活动状态,在调整窗口大小时滚动条正常激活/停用。

但是,在加载大图像时,我看到的是文档视图正常扩展,但滚动视图和窗口随之扩展!在那之后,窗口不允许将大小调整得更小。显然我做得不对,但我不明白为什么。

我尝试更改文档视图的约束的优先级,任何高于 NSLayoutPriorityWindowSizeStayPut 的内容和窗口都会像上面一样扩展(我猜是有道理的),但任何更低的内容和文档视图永远不会调整大小,调整窗口的大小更小但滚动条不是启用。

有谁知道我是否需要在其他地方设置其他优先级,或者我需要额外的约束,或者完全不同的方法......我应该设置文档视图的“固有大小”吗?指向我还没有看到的任何自动布局开源/示例代码的指针也会很酷。

4

1 回答 1

2

这原来是老translatesAutoresizingMaskIntoConstraints问题。当我遇到这些问题时,我在 Interface Builder 中设置了 NSScrollView 的文档视图。

我改为在运行时创建视图(或者我可以在 IB 中将它单独定义为“松散”视图),然后在我的窗口控制器中连接它:

self.backgroundPatternView.translatesAutoresizingMaskIntoConstraints = NO;
self.scrollView.documentView = self.backgroundPatternView;

在此更改之后,默认优先级工作正常。

于 2012-10-09T21:02:53.137 回答