Представление только для печати неправильно размещает подпредставления

Я пытаюсь распечатать (в PDF) NSView, который не отображается на экране и не имеет родительского представления.

Чтобы отобразить диалоговое окно печати, я добавил следующую строку в делегат моего приложения applicationDidFinishLaunching::

[myPrintView print:self];

Подвиды снизу вверх

В предварительном просмотре диалогового окна печати подпредставления отображаются снизу вверх. Сначала отображается нижний подвид, затем тот, который должен быть над нижним видом и т. д., а верхний подвид отображается последним.

Когда я добавляю представление для печати в представление прокрутки, чтобы оно отображалось на экране до вызова печати, порядок был правильным как в представлении прокрутки, так и в предварительном просмотре печати.

self.scrollView.documentView = myPrintView;

Подпредставления в правильном порядке

Я меняю свой вид печати, чтобы он не переворачивался, он отображается в правильном порядке в обеих ситуациях, но помещается в нижнюю часть бумаги.

Правильный порядок, но внизу страницы

Как я могу решить эту проблему? Держите его перевернутым и решите неправильный порядок, или оставьте перевернутым = НЕТ и используйте другой метод, чтобы прикрепить его к верхней части страницы?

Я добавил свой проект в https://bitbucket.org/bpeiren/print-experiments. , если это поможет.


person nephilim    schedule 29.12.2012    source источник
comment
Похоже, это проблема с макетом, а не с порядком печати. Как добавить представления в представление для печати? Вы звоните -setFrame:? Автомакет включен?   -  person paulmelnikow    schedule 30.12.2012
comment
Да, я использую Auto Layout. Все подвиды добавляются в XIB, за исключением добавления самого печатного представления к родителю для тестирования. Я сделал поиск, чтобы быть уверенным, но нигде я не устанавливаю рамку вручную.   -  person nephilim    schedule 30.12.2012


Ответы (1)


Похоже, у вас неоднозначный макет, а это означает, что у вашего пера недостаточно ограничений, чтобы гарантировать, что подпредставления появляются там, где вы хотите. Оба макета, которые вы видите, удовлетворяют ограничениям, поэтому вам нужно ограничить больше аспектов макета, чтобы подпредставления отображались именно там, где вы хотите.

Судя по двум опубликованным вами изображениям вашего макета, я бы посоветовал вам попробовать:

  1. Прикрепление верхней части вашего вида сверху к верхней части контейнера
  2. Закрепление интервала по вертикали между верхним и нижним представлениями

Добавлено: я только что скачал ваш .xib, и становится ясно, что вы ограничиваете верхнее подпредставление верхней частью представления, а вертикальное расстояние между подпредставлениями - вниз по странице. Так что это не решит проблему. Высота переменная? Если нет, попробуйте ограничить высоту контейнера. Почему вы заключаете поля текста и изображения в NSViews? Может проще их убрать. (Вы же не получаете журнальные сообщения о невыполнимых ограничениях, верно?)

Это видео WWDC, Introduction to Auto Layout, дает лучшее объяснение неоднозначный макет я видел.

В целях отладки вы можете добавить представление в окно, а затем работать с автоматическим макетом, который описывает этот хороший ответ.

Кроме того, вы можете просто отключить Auto Layout для этого пера. Так как ваш вид прост, вы можете достаточно легко управлять компоновкой по старинке, с пружинами и распорками.

person paulmelnikow    schedule 30.12.2012