NSPrintInfo изменен в macOS Sierra

#objective-c #xcode #cocoa

#objective-c #xcode #какао

Вопрос:

У меня есть приложение, полученное из шаблона приложения Cocoa Xcode, которое правильно печатает на El Capitan, но вводит сантиметровое поле по всему кругу с теневым полем на Sierra. Изменение значений полей (в общем экземпляре в viewDidLoad ViewController) на большие положительные значения увеличивает поля, но уменьшение их до нуля по-прежнему оставляет поле полей и теней. Изображение представляет собой снимок экрана предварительного просмотра. Я хотел бы вернуться к тому, чтобы PDF занимал всю печатную страницу. Просмотр меню для файла / печати показывает, что он выполняет печать первого ответчика :. Должен ли я попытаться переопределить эту функцию? Но если приведенный ниже код выполняется безрезультатно, что хорошего это даст?

 NSPrintInfo *PageDefaults = [NSPrintInfo sharedPrintInfo];
[PageDefaults setBottomMargin:0];
[PageDefaults setLeftMargin:0];
[PageDefaults setRightMargin:0];
[PageDefaults setTopMargin:1];
  

введите описание изображения здесь

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

Раскадровка показывает, что я использую только элемент управления просмотром PDF, который заполняет всю сцену ViewController введите описание изображения здесь

И, наконец, ViewController на экране показывает, что он выглядит так, как должен: введите описание изображения здесь

Комментарии:

1. Как вы печатаете что? Возможно, изменился класс представления. Мое простое тестовое приложение не печатает границу.

2. Не совсем справедливое сравнение, чтобы сказать, что оно работает с простым тестовым приложением, поскольку вы, вероятно, создали его вчера в Xcode 8, тогда как мое приложение было изначально создано пару лет назад в Xcode 5 или 6! Надеюсь, мое редактирование выше прояснит проблему.

3. Проект был создан в OS X 10.10 и Xcode 6.4. Я попробую PDFView. Это не единственная проблема с PDFView в 10.12.

Ответ №1:

-[PDFView print:] в 10.10 вызывает printWithInfo:autoRotate:pageScaling: . В 10.12 -[PDFView print:] вызывает printOperationWithView: и печатает фон. Решение: создайте подкласс PDFView , переопределите print: и вызовите printWithInfo:autoRotate:pageScaling: .

 - (void)print:(id)sender {
    [self printWithInfo:[NSPrintInfo sharedPrintInfo] autoRotate:YES pageScaling:kPDFPrintPageScaleToFit];
}
  

Комментарии:

1. Абсолютно идеально! Спасибо.