在NSScrollView的文档视图上自动布局出现问题

时间:2012-08-30 07:08:42

标签: objective-c cocoa appkit autolayout

我正在尝试找到使用Lion的自动布局的最佳方法,使这个简单的窗口包含一个带有居中图像和周围边框的可滚动视图。看看我真棒的ascii艺术:

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

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

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

我尝试更改文档视图约束的优先级,NSLayoutPriorityWindowSizeStayPut以上的任何内容和窗口如上所述扩展(我猜是有意义的),但是任何更低的文档视图都不会调整大小,调整窗口大小的工作但滚动条未启用。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

此更改后,默认优先级正常。