【问题标题】:Print-only view lays out subviews incorrectly仅打印视图错误地布置子视图
【发布时间】:2012-12-14 12:21:33
【问题描述】:

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

为了显示打印对话框,我在我的应用代理的applicationDidFinishLaunching: 中添加了以下行:

[myPrintView print:self];

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

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

self.scrollView.documentView = myPrintView;

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

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

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

【问题讨论】:

  • 看起来这是布局问题,而不是打印顺序问题。如何将视图添加到打印视图?你打电话给-setFrame:吗?自动布局是否开启?
  • 是的,我正在使用自动布局。所有子视图都添加到 XIB 中,除了将 printview 本身添加到父视图以进行测试。我进行了搜索以确定但我无法手动设置框架。

标签: objective-c cocoa autolayout


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多