ScrollView in WebView

* Normally, if we don't want let the webview scroll, apple call it "rubber band", we should use the code bellow:

        if ([self.webView respondsToSelector:@selector(scrollView)]) {
            ((UIScrollView*)[self.webView scrollView]).bounces = NO;
        } else {
            for (id subview in self.webView.subviews) {
                if ([[subview class] isSubclassOfClass:[UIScrollView class]]) {
                    ((UIScrollView*)subview).bounces = NO;
                }
            }
        }

 Diable padding while keyboard pop up:

UIScrollView *scv = [self getScrollView];
    scv.scrollEnabled = NO;

 And if you want the scroll view fixed when some text field get focus, set context offset on key borad pop up won't effect:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];


- (void)keyboardWillShowOrHide:(NSNotification*)notif{
    [super keyboardWillShowOrHide:notif];
    
    [self performSelector:@selector(resetScrollViewOffset) withObject:nil afterDelay:0.01];
}

-(void)resetScrollViewOffset{
    [[self getScrollView] setContentOffset:CGPointMake(0, 0) animated:NO];
}

 I've tried perm on main thread or perform with delay, if the delay is large enough such as 0.2, it may work but the scrollview may scroll down then back, that's not a good solution, so try the code bellow:

UIScrollView *scv = [self getScrollView];
    scv.scrollEnabled = NO;
    scv.delegate = self;

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"scroll");
    [self.webView.scrollView setContentOffset:CGPointZero];
}

Reference:

http://stackoverflow.com/questions/13071195/uiwebview-scrolling-down-on-input-focus-ios-6-only

猜你喜欢

转载自shappy1978.iteye.com/blog/1925073
今日推荐