I am adding this method from our Xamarin sample code. You can review the logic behind it, and implement it directly in IOS. We do not have this code in IOS, so you will need to adapt this logic to your code.
The main idea is that you can invoke this method once you sent your print job to the printer to check two statuses while the printer is printing. One is with the status.IsReadyToPrint and the second is with the status.NumberOfFormatsInReceiveBuffer. The second will tell you when the buffer is empty, it means that there is not a print-job, or the print-job just finalized. The other portions of the code are to check if printer found an error during the printing job (out of paper, etc).
protected bool PostPrintCheckStatus(IZebraPrinter printer)
// Check the status again to verify print happened successfully
IPrinterStatus status = printer.CurrentStatus;
// Wait while the printer is printing
while ((status.NumberOfFormatsInReceiveBuffer > 0) && (status.IsReadyToPrint))
status = printer.CurrentStatus;
// verify the print didn't have errors like running out of paper
ShowErrorAlert("Error durring print. Printer is " + status.Status);
// label(s) printed