代码之家  ›  专栏  ›  技术社区  ›  theLastNightTrain

当UIWebView与PushViewController一起使用时,Scrollstotop不工作,正在寻找解决方案

  •  1
  • theLastNightTrain  · 技术社区  · 15 年前

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

    取决于我如何呈现新的Web视图,用户可以点击顶部的状态栏并将Web视图滚动到顶部的功能,要么有效,要么无效。

    如果我使用:

    • (void)PresentModalView控制器:(uiviewController*)ModalView控制器动画:(bool)动画

    在rootview上,webview会滚动到顶部。

    如果我更改了这一行代码,而是使用:

    • (void)pushview控制器:(uiviewcontroller*)viewcontroller动画:(bool)动画

    在导航控制器上,Scrollstotop功能停止工作。

    然而,由于应用程序上下文中的其他原因,我真正想要使用的是pushviewcontroller方法。但是,我也希望保持滚动到顶部的行为。

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

    -正在尝试设置WebView Internal ScrollView Scrollstotop属性

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

    (没有明显的效果)。

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

    我不相信还有其他视图可以声明“Scrollstotop”属性(上面的第一个测试证明了在任何情况下)。

    除了尝试将uiWebView嵌入到uiScrollView中之外(我认为这样做会很痛苦),我已经没有足够的途径来探索解决这个问题。

    我希望有人能找到一种方法来纠正这个问题?

    2 回复  |  直到 15 年前
        1
  •  1
  •   muccy    15 年前

    试着用相反的方法来解决问题。

    在根视图控制器中:

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

    再见!

        2
  •  0
  •   theLastNightTrain    15 年前

    结果发现它不起作用,因为我定制导航栏的方式。我用一个uibarbuttonitem覆盖了leftbarbuttonitem,然后占据了整个导航栏(我想我几个月前从一些苹果代码中采用了这种方法,但不确定)。我在另一个视图上使用了相同的方法,滚动桌面在那里工作得很好。

    去掉这些代码,并将自定义导航栏视图放入(例如)self.navigationcontroller.titleView,从而解决了这个问题。我真的不知道为什么,就像我说的,它对其他观点很有用。

    我在这个问题上浪费了很多时间,所以我希望通过在这里描述它来给别人留点头发。