18

我有一个在导航栏下方根据需要滚动的 web 视图。

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

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

4

8 回答 8

13

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

self.navigationController.navigationBar.translucent = NO;

然后框架的定位将采用与 iOS6 相同的行为,神奇地!

于 2013-10-10T10:28:51.233 回答
6

里克的回答是正确的,除了最高值应该是负数,这对我有用!

[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。

于 2014-04-23T15:58:28.470 回答
5

我解决这个问题的方法是使用 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];
于 2013-12-26T21:50:52.417 回答
3

我有同样的问题并修复了它。解决方案非常简单:

转到情节提要,选择包含您的 UIWebView 的视图控制器并打开 Attributes Inspector。在这里,您会看到标题“Extend Edges”,只需取消选中“Under Top Bars”框,我就会工作!

希望这可以帮助 !

于 2014-11-02T16:42:37.203 回答
1

我的解决方案:

- (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;
}
于 2015-02-06T03:24:58.650 回答
1

使用以下

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height;
applicationFrame.origin.y = navHeight + 4;
webView = [[UIWebView alloc] initWithFrame:applicationFrame];
于 2013-09-29T16:46:24.570 回答
1

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

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

不幸的是,如果放置在 中,它没有任何效果viewWillAppear:,因此当视图出现时,您会在内容中看到可见的跳转,因为它从导航栏下方转移到新位置。

于 2014-04-30T18:05:01.143 回答
0

对于@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];
}
于 2015-11-17T18:34:13.537 回答