If you can post the code for your pullToRefreshView, I'll see if I can replicate it and see what's up.
But one thing it could be is the height (or width) of the scrollView content size gets locked to whatever size the view is at the moment you scroll left/right (or up/down). If this is the case then it's a matter of changing the content size.
The problem was indeed related to the contentSize.
If the contentSize does not fill the entire available Y space, this problem occurs.
For example, iPhone 6 screen in portrait is 375x667. Status Bar height is 20 points and NavigationBar height is 44 points (in portrait mode), so I have 603 points of height available. When the placeholder row was needed, I was miscalculating the height of it. So the placeholder row was added to the grid and the final contentSize of the grid was 600 instead of 603.
So for the pullToAction to work perfectly (just like in a TableView), the height value of the contentSize of the grid must be equal or greater to the frame's height of the grid.