I don't understand what's happening exactly, but I had the same problem and fixed it by
1) ensuring that logic in my overrides is being executed on the UI thread
2) moving my AddPrintFormatter call to the constructor method instead of calling from a NumberOfPages override (which allowed me to delete this override property).
There seems to be some weird threading behavior now when overriding UIPrintPageRenderer (at least in Xamarin's implementation).
For example, adding this simple override causes a UIKit Consistency error for me:
public override nint NumberOfPages
{
get
{
return base.NumberOfPages;
}
}
So it seems the base method begins execution on the UI thread when there isn't an override, but the subclass's override begins execution on a worker thread.
The iOS9 SDK Release Notes document says:
"Apps that subclass UIPrintPageRenderer or UIPrintFormatter to draw content for printing must be built with the iOS 9 SDK for the preview to display. The behavior of UIPrintPageRenderer has been updated to call drawPageAtIndex:inRect: multiple times with potentially different page sizes and margins. Various methods on UIPrintPageRenderer may be called from a non-main thread, but never from multiple threads concurrently."