当UIWebView与pushViewController一起使用时,scrollsToTop不起作用,寻找解决方案

时间:2009-11-27 10:53:42

标签: iphone uiwebview

我在导航控制器的根目录下有一个带有表视图的应用程序,在选择表格单元格时,它会显示一个新的视图控制器,它只包含一个UIWebView(带有工具栏和导航栏)。

根据我呈现新网页视图的方式,用户可以点按顶部状态栏并让网页视图滚动到顶部的功能可以正常工作,也可以不工作。

如果我使用:

  • (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
在RootView上

,然后webview会滚动到顶部。

如果我更改了一行代码而改为使用:

  • (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

在导航控制器上,然后scrollsToTop功能停止工作。

我真正想要使用的是,在app的上下文中出于其他原因,是pushViewController方法。但是,我还想保持scrollsToTop行为。

到目前为止,我尝试了各种方法,其中一些描述如下:

- 尝试设置webview内部scrollView scrollsToTop属性

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = YES;

(没有明显效果)。

- 更改设置NavBar属性的顺序或根本不设置任何属性 - 在新视图推送后添加额外的“window makeKeyAndOrderFront”调用。

我不相信那里有其他观点可以声称“scrollsToTop”属性(上面的第一个测试证明了无论如何)。

如果没有尝试将UIWebView嵌入到UIScrollView中,我认为这将是痛苦的,我已经用尽了探索的路线来解决这个问题。

我希望其他人找到解决方法吗?

2 个答案:

答案 0 :(得分:1)

尝试使用反向方法作为解决方法。

在根视图控制器中:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.tableView.scrollsToTop = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tableView.scrollsToTop = YES;
}

再见!

答案 1 :(得分:0)

事实证明,由于我定制Navbar的方式,它无法正常工作。我用一个UIBarButtonItem覆盖了leftBarButtonItem,然后占用了整个导航栏(我想我几个月前从一些Apple代码中采用了这种方法,但不确定)。我在另一个视图上使用相同的方法,而scrollsToTop在那里工作得很好。

取出该代码并将自定义Navbar视图放入(例如)self.navigationController.titleView,而不是解决了这个问题。我真的不知道为什么,就像我说它适用于其他观点一样。

我浪费了很多时间来处理这个问题,所以我希望通过在这里描述来节省别人的头发:)