Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

Using this method to hide the status bar:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

When setting "hidden" back to NO, the tap-to-scroll-to-top (in UIWebView, UITableView, whatever) doesn't work any more, and requires a restart of the app to get the functionality back.

Is this a bug (I filed a rdar anyhow) or have I missed a step? Should I perhaps expect this behavior since the statusBar "loses touch" somehow with the respective view?

like image 888
avocade Avatar asked Sep 01 '09 10:09

avocade


3 Answers

You could try setting the ScrollsToTop property to true again after re-showing it:

[currentView setScrollsToTop:YES];

If that's not working, are you definitely only showing one view? If there is more than one scrolling view a scrollViewDidScrollToTop message is ignored...

like image 126
h4xxr Avatar answered Oct 18 '22 12:10

h4xxr


In iOS 5.0 you can access the scrollview property of the UIWebView

webView.scrollView.scrollsToTop = YES;
like image 23
Paul Cooper Avatar answered Oct 18 '22 10:10

Paul Cooper


The following fix by Alex worked for me. Thanks!

((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;

Being in a hurry this fix worked great, however given more time I might've subclassed the UIWebView and accessed the protected UIScrollView member directly.

The worry I have with Alex' method is that it assumes that UIScrollView is at index zero of the subviews (encapsulation allows private members to change). Which suggests another solution still:

for (UIView* v in [webView subviews])
{
    if ([v isKindOfClass:[UIScrollView class]])
    {
        (UIScrollView *)v.scrollsToTop = NO;
    }
}
like image 7
user305578 Avatar answered Oct 18 '22 10:10

user305578