2012-12-29 106 views
1

我試圖打印(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,以防萬一。

+0

看起來這是佈局問題,而不是打印順序。如何將視圖添加到打印視圖中?你叫'-setFrame:'?自動佈局是否開啓? – paulmelnikow

+0

是的,我正在使用自動佈局。所有的子視圖都添加到XIB中,除了將printview本身添加到父項進行測試。我做了一個搜索,以確保無處設置框架手動。 – nephilim

回答

0

這聽起來像你有不明確的佈局,這意味着你的筆尖沒有足夠的約束來確保子視圖出現在你想要的地方。您看到的兩個佈局都滿足約束條件,因此您需要限制佈局的更多方面,以便子視圖顯示在您想要的位置。

從您發佈佈局的兩個圖像來看,我建議你試試:

  1. 鋼釘您的俯視圖的頂部容器
  2. 管腳之間的垂直間距頂你頂部和底部的觀點

補充:我剛剛下載your .xib,很明顯,你是限制頂部子視圖到視圖的頂部,subvie的垂直間距ws,在頁面下方。所以這不會解決問題。高度是否可變?如果不是,請嘗試限制容器的高度。爲什麼在NSViews中包含文本和圖像字段?將它們取出可能會更簡單。 (你沒有得到關於不可滿足限制的日誌消息,對吧?)

這個WWDC視頻Introduction to Auto Layout給出了我見過的模糊佈局的最佳解釋。

爲了進行調試,您可以將視圖添加到窗口,然後使用自動佈局工作,其中this good answer describes

或者,您可以關閉此筆尖的自動佈局。由於您的視圖非常簡單,您可以使用彈簧和支柱以舊的方式輕鬆管理佈局。