仅打印视图错误地列出了子视图

时间:2012-12-29 15:13:53

标签: objective-c cocoa autolayout

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

要显示打印对话框,我已将以下行添加到我的应用代表的applicationDidFinishLaunching:

[myPrintView print:self];

Subviews from bottom to top

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

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

self.scrollView.documentView = myPrintView;

Subviews in correct order

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

Correct order but at bottom of page

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

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

1 个答案:

答案 0 :(得分:0)

听起来你的布局模糊不清,这意味着你的笔尖没有足够的约束来确保子视图出现在你想要的位置。您看到的两个布局都满足约束条件,因此您需要约束布局的更多方面,以便子视图显示在您想要的位置。

根据您发布的布局的两张图片判断,我建议您尝试:

  1. 将顶部视图顶部固定到容器顶部
  2. 固定顶视图和底视图之间的垂直间距
  3. 已添加:我刚刚下载了your .xib,很明显您将顶级子视图限制在视图顶部,并将子视图的垂直间距限制在页面下方。所以这不会解决问题。高度是变量吗?如果没有,请尝试约束容器的高度。为什么要在NSView中包含文本和图像字段?取出它们可能更简单。 (你没有得到关于不可满足约束的日志消息,对吗?)

    这个WWDC视频,Introduction to Auto Layout给出了我见过的模糊布局的最佳解释。

    出于调试目的,您可以将视图添加到窗口,然后使用this good answer describes的自动布局。

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