Я использую UIActivityViewController для печати (среди прочего). Поэтому я передаю ему экземпляр своего собственного подкласса UIPrintPageRenderer, для которого соответствующий код приведен ниже.
По сути, я хочу напечатать две многострочные атрибутивные строки, расположенные рядом, как два столбца (в конце концов, я хотел бы, чтобы один был встроен в другой и обернут вокруг, но не будем здесь забегать вперед) . Текстовое представление с правой стороны должно иметь фиксированный размер в соответствии с его содержимым (для этого его подкласс переопределяет sizeToFit()). Левое боковое текстовое представление должно заполнить оставшуюся ширину.
Итак, я использую экземпляры UITextView, заполненные строками с атрибутами, и назначаю их соответствующие выходные данные .viewPrintFormatter() в качестве UIPrintFormatters для UIPrintPageRenderer.
Это частично работает. Обе атрибутированные строки печатаются на странице.
Однако они печатаются друг над другом, оба у левого края страницы.
Мои попытки использовать UIEdgeInsets для ограничения их печати терпят неудачу, если только я не использую жестко заданные значения кода. Похоже, это потому, что я получаю 0
(ноль) при запросе printableRect.size.width
.
Почему printableRect моего UIPrintPageRendere всегда имеет нулевую ширину?
Каков правильный способ добиться параллельной печати двух многострочных строк с атрибутами?
class CustomPrintPageRenderer: UIPrintPageRenderer {
let leftTextView = UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
let rightTextView = IngredientsTextView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
init(_ thing: Thing) {
super.init()
addThing(thing)
}
func addThing(_ thing: Thing) {
// Do some stuff here to populate the two text views with attributed strings
// ...
// ...
rightTextView.sizeToFit()
let leftPrintFormatter = leftTextView.viewPrintFormatter()
let rightPrintFormatter = rightTextView.viewPrintFormatter()
print(paperRect.size.width)
print(printableRect.size.width)
rightPrintFormatter.perPageContentInsets = UIEdgeInsets(top: formatter.titleFontSize, left: printableRect.size.width - rightTextView.frame.size.width, bottom: 0, right: 0)
leftPrintFormatter.perPageContentInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: rightTextView.frame.size.width)
addPrintFormatter(leftPrintFormatter, startingAtPageAt: numberOfPages)
addPrintFormatter(rightPrintFormatter, startingAtPageAt: numberOfPages)
}
}