objective-c - ScrollView 文档 View 中的自动布局出现问题

标签 objective-c cocoa appkit autolayout

我正在尝试找到使用 Lion 的自动布局的最佳方法来使这个简单的窗口包含一个可 ScrollView ,该 View 具有居中图像和周围的边框。看看我精彩的 ASCII 艺术:

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

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

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

我尝试更改文档 View 约束的优先级,任何高于 NSLayoutPriorityWindowSizeStayPut 的内容,窗口都会如上展开(我猜是有道理的),但任何低于此值的内容,文档 View 永远不会调整大小,将窗口大小调整得更小可以,但滚动条可以未启用。

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

最佳答案

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

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

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

进行此更改后,默认优先级运行良好。

关于objective-c - ScrollView 文档 View 中的自动布局出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191634/

相关文章:

ios - 使用库实现自定义 UISwitch - 我做错了什么导致尺寸问题?

objective-c - NSURL 到 NSString 转换做奇怪的事情

swift - CALayer 什么时候有 presentationLayer?

ios - 段控制段的大小

objective-c - 创建一个具有 objective c 框架依赖性的胖框架

objective-c - 什么是可以同时绘制的界面生成器?

cocoa - 高度约束阻止调整 NSWindow 的大小

iphone - 如何重置核心数据中的主键计数/最大值?

macos - “添加到阅读列表”共享菜单项在 Mojave 中不起作用