Earlier quoted context omitted.
There's a lot of tricks you can try, but even rendering the first set of visible rows can take more than a 60fps time window will allow.
Don't pick a fixed value for the batch size; render until your time is exhausted and then wait for the next batch. Yes, this'll be slower overall, but you ensure that the app stays responsive regardless of device or CPU availability.
The only way I see that working out nicely is if you can know the height of the table in advance, which is generally not the case.