刷新UIWebView会使其在y轴上跳起64个像素

时间:2014-02-10 18:00:01

标签: iphone objective-c ios7 uiwebview uiscrollview

我有一个UIWebView控制器,它在故事板中设置,并作为导航控制器的详细控制器推送。 UIWebView以我想要的方式显示,完全位于半透明导航栏下方,但是当您刷新UIWebView时,它每次都会跳起64个像素,如果您点击足够的次数,最终会返回到网页的顶部。

我已经知道这是由故事板自动设置的UIWebView滚动视图插图引起的,但我想留下这一点,因为我喜欢让UIWebView的内容流在半透明导航栏下面。

有没有办法可以解决这个64像素每次跳起而没有用户看到它的情况?基本上当用户点击刷新时,它应该刷新到页面的那个位置而不再“跳”。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:0)

您应该将iOS 6/7 Delta Y参数设置为+64(如果您在iOS 6视图中构建应用程序)或-64(如果您选择了iOS 7):)

答案 1 :(得分:0)

我通过在viewDidLoad中添加它来修复此问题:

@property (nonatomic, assign) CGPoint lastScroll;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.webView.scrollView.delegate = self;

    self.lastScroll = CGPointMake(0, -64);
}

在这些方法中,我这样做:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
   self.lastScroll = CGPointMake(self.webView.scrollView.contentOffset.x, self.webView.scrollView.contentOffset.y);
}

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
    self.lastScroll = CGPointMake(self.webView.scrollView.contentOffset.x, -64);
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    self.lastScroll = CGPointMake(self.webView.scrollView.contentOffset.x, self.webView.scrollView.contentOffset.y);
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (decelerate != YES)
    {
        self.lastScroll = CGPointMake(self.webView.scrollView.contentOffset.x, self.webView.scrollView.contentOffset.y);
    }
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (navigationType == UIWebViewNavigationTypeLinkClicked || navigationType == UIWebViewNavigationTypeFormSubmitted)
    {
        self.lastScroll = CGPointMake(0, -64);
    }

    return YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    self.navigationItem.title = [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"];

    [self.webView.scrollView setContentOffset:self.lastScroll];
}

答案 2 :(得分:0)

在UIWebView控制器中尝试此操作

    self.automaticallyAdjustsScrollViewInsets = YES;
    self.edgesForExtendedLayout = UIRectEdgeTop;  // Added