I've never had any issues with the UIScrollView protocol methods being unreliable. Is it possible for you to manage whatever your doing currently in layoutSubviews from another delegate class? Like a parent view, or something?
Then you could listen for the delegate methods with (potentially) more reliability.
#pragma mark UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (self.scrollViewDecelerating)
{
// stuff...
}
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
self.scrollViewDecelerating = YES;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.scrollViewDecelerating = NO;
}