iOS7 Webview导航栏下的初始滚动位置

iOS7 Webview导航栏下的初始滚动位置,ios7,Ios7,我有一个webview,它可以根据需要在导航栏下面滚动 但是,当我第一次加载控制器时,webview中加载的页面会滚动,以便与导航栏顶部对齐。当我滚动web视图时,正确的插图出现在顶部以正确放置,只是初始位置不正确 如何将初始位置完全滚动到顶部,包括插图?使用下面的 CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; CGFloat navHeight = self.navigationController.na

我有一个webview,它可以根据需要在导航栏下面滚动

但是,当我第一次加载控制器时,webview中加载的页面会滚动,以便与导航栏顶部对齐。当我滚动web视图时,正确的插图出现在顶部以正确放置,只是初始位置不正确

如何将初始位置完全滚动到顶部,包括插图?

使用下面的

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height;
applicationFrame.origin.y = navHeight + 4;
webView = [[UIWebView alloc] initWithFrame:applicationFrame];

如果您不介意使用不透明的导航栏,那么最简单的解决方案是在包含web视图的视图控制器中执行此操作:

self.navigationController.navigationBar.translucent = NO;

然后,框架的定位将采用与iOS6相同的行为,不可思议

解决此问题的方法是使用webViewDidFinishLoad委托回调。在web视图的回调方法中,我设置了所有工作,以使web视图的滚动视图看起来正确

[webView.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 0, 0)];
[webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

Rick的回答是正确的,除了最高值应该是负值,这对我来说是有效的

[self.webView.scrollView setContentInset:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(-44, 0, 0, 0)];
[self.webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

我使用了-44,如果顶部没有状态栏,则应使用-64。

您还可以在
视图中设置webview滚动视图的内容偏移量显示:
,例如:

[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO];

不幸的是,如果放置在
视图中,它将不起作用:
,因此当视图出现时,您将看到内容从导航栏下方移动到新位置时出现可见的跳转。

我也遇到了同样的问题,并解决了它。解决方案非常简单:

转到情节提要,选择包含UIWebView的视图控制器并打开属性检查器。在这里,您将看到标题“扩展边”,只需取消选中“顶栏下”框,我就可以工作了

希望这有帮助

我的解决方案:

- (void)loadView {
    ...

    _offsetSet = NO;
}

- (void) viewDidLayoutSubviews {

    if (!_offsetSet) {
        [_webView.scrollView setContentOffset:CGPointMake(0, -self.topLayoutGuide.length) animated:NO];
    }
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    _offsetSet = YES;
}

有关@Puran答案的更一般版本,而不是硬接线44或64,请从topLayoutGuide获取。此外,如果多次加载,则只需更改这些值一次:

UIEdgeInsets insets = self.myWebView.scrollView.contentInset;
if ( UIEdgeInsetsEqualToEdgeInsets(insets, UIEdgeInsetsZero)) {
    insets.top = -self.topLayoutGuide.length;
    [self.myWebView.scrollView setContentInset:insets];
    [self.myWebView.scrollView setScrollIndicatorInsets:insets];
    [self.myWebView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
}

绝对有效。但是,我真正希望看到的是包含UIWebView的UIViewController中可用的UITableViewController的行为。这在7.0.4中仍然是一个问题,下面的任何建议都无法解决。还有其他想法吗?不是我想要的。这将恢复到iOS7之前的行为,其中webview的边界从(0,navbarheight)开始。该值必须为正值。44或64.很多人都在问如何抑制状态栏下的内容;这就是我需要一个Web应用程序来完全填充iPad的查看端口。然而,我用了-20而不是-44。