1

我正在尝试打印(到 PDF)一个未显示在屏幕上且没有父视图的 NSView。

为了显示打印对话框,我在我的应用程序委托中添加了以下行applicationDidFinishLaunching:

[myPrintView print:self];

子视图从下到上

在打印对话框的预览中,子视图自下而上显示。首先显示底部子视图,然后是应该在底部视图上方的子视图等,最后显示顶部子视图。

当我将打印视图添加到滚动视图时,使其在打印调用之前显示在屏幕上,滚动视图和打印预览中的顺序都是正确的。

self.scrollView.documentView = myPrintView;

正确顺序的子视图

我将我的打印视图更改为不翻转,它在两种情况下都以正确的顺序显示,但它放在纸的底部。

正确的顺序,但在页面底部

我该如何解决这个问题?保持翻转并解决错误的顺序,还是保持翻转 = NO 并使用不同的方法将其粘贴到页面顶部?

我已将我的项目添加到https://bitbucket.org/bpeiren/print-experiments以防万一。

4

1 回答 1

0

听起来您的布局不明确,这意味着您的 nib 没有足够的约束来确保子视图出现在您想要的位置。您看到的两个布局都满足约束,因此您需要约束布局的更多方面,以便子视图出现在您想要的位置。

从您发布的两张布局图片来看,我建议您尝试:

  1. 将顶视图的顶部固定到容器的顶部
  2. 固定顶视图和底视图之间的垂直间距

补充:我刚刚下载了您的.xib,很明显您将顶部子视图限制在视图的顶部,以及子视图的垂直间距,在页面下方。所以这不会解决问题。高度是可变的吗?如果没有,请尝试限制容器的高度。为什么要在 NSViews 中包含文本和图像字段?把它们拿出来可能更简单。(您不会收到有关不可满足约束的日志消息,对吧?)

这个 WWDC 视频,自动布局简介给出了我见过的模糊布局的最佳解释。

出于调试目的,您可以将视图添加到窗口,然后使用这个好答案描述的自动布局。

或者,您可以关闭此笔尖的自动布局。由于您的视图很简单,您可以使用弹簧和支柱很容易地管理布局。

于 2012-12-30T19:18:31.197 回答