UIScrollView & setContentOffset random scrolling on iOS 4

We encountered a nasty bug with UIScrollView while porting app to iOS 4. The following code worked just fine on old iPhone versions:

 
// Update view with new content
[self updateContent:...]

// We want the view to be on top every time the it is shown
[scrollView setContentOffset:CGPointMake(0,0) animated:NO];

// And set the correct size to enable scrolling.
// contentHeight is updated when setting the content of subviews.
[scrollView setContentSize:CGSizeMake(self.view.frame.size.width, contentheight)];

No problems. But on iOS 4 the UIScrollView decided to do something fancy and scroll to random position depending on where it was left when the view was hidden the last time. After spending expensive manpower to solve the issue by trying numerous ways to tell the scrollView to go to top using setContentOffset, the final solution was simple yet very different what one might think: to fix this we had to set the contentSize to zero before updating any of the content.

// Need to do this on iOS 4 or the view scrolls to random position
[scrollView setContentSize:CGSizeMake(0,0)];

// Update view with new content
[self updateContent:...]

// We want the view to be on top every time it is shown
[scrollView setContentOffset:CGPointMake(0,0) animated:NO];

// And set the correct size to enable scrolling.
// contentHeight is updated when setting the content of subviews.
[scrollView setContentSize:CGSizeMake(self.view.frame.size.width, contentheight)];

Hopefully there is more logical way to update scrollview’s content without being scrolled around.