iphone:在UIWebView上查看?

时间:2011-02-23 07:33:09

标签: iphone ipad uiwebview uiscrollview

我正在开发一个浏览器应用程序,我在UIWebView上有一个地址栏。在MobileSafari上,如果向下滚动,地址栏将开始移动到屏幕外的顶部,UIWebView不会滚动。只有当地址栏完全消失时,它才会开始滚动。我想在我的应用程序中也有这种效果。

实施此方法的最佳方式是什么?

由于

4 个答案:

答案 0 :(得分:15)

实现这一目标的唯一方法是iOS 5。 在iOS 5中,UIWebView具有UIScrollView子视图。

并使用以下代码:

设置地址栏的区域:

[[myWebView scrollView] setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];

使用scrollview委托移动地址栏:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

        if(scrollView.contentOffset.y>=-64&&scrollView.contentOffset.y<30)
        {
            topBar.frame=CGRectMake(0,-44-scrollView.contentOffset.y, 320, 44);

        }
        else if(scrollView.contentOffset.y<-64)
            topBar.frame=CGRectMake(0,20, 320, 44);//Lock the position
}

答案 1 :(得分:4)

有一种方法,但我不确定它是否有点过于hacky。首先在webview中搜索scrollview,然后更改contentInset,最后将搜索栏(例如)添加到scrollview。以下代码只是一个示例,我没有正确设置任何框架,40只是搜索栏的组合高度。我不确定这是否适用于每个iOS版本。

UIWebView * myWebView = [[UIWebView alloc] init]
UISearchBar * mySearchBar = [[UISearchBar alloc] init];
for (NSObject * aSubView in [myWebView subviews]) {
   if ([aSubView isKindOfClass:[UIScrollView class]]) {
      UIScrollView * theScrollView = (UIScrollView *)aSubView;
      theScrollView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0);
      [theScrollView addSubview:mySearchBar];
   }
}

答案 2 :(得分:0)

想想看,它只是一个滚动的视图,顶部有一个地址栏,网页视图和条形图总是一起移动。现在,假设您创建一个滚动视图并添加两个子视图,地址栏和Web视图(一个在另一个下面)。需要注意的是,在加载页面后(webViewDidFinishLoad:)确定并修复了Web视图的高度。

因此,它只是一个滚动视图,其contentSize等于条形的高度+ Web视图的高度。现在,默认情况下,Web视图允许滚动,因为它具有滚动视图作为子视图。由于只有外部滚动视图应滚动,因此需要关闭Web视图的滚动。为此,获取第一个子视图(即滚动视图)并使用以下命令禁用其滚动:

(UIScrollView*)[myWebView.subviews objectAtIndex:0].scrollEnabled = NO;

答案 3 :(得分:0)

PeakJi的解决方案有效,但有点滞后。更好的解决方案是在UIScrollView的内容偏移量中添加一个观察者,如

[scrollview addObserver:self forKeyPath:@"contentOffset" 
                                    options:NSKeyValueObservingOptionNew context:nil];

您可以在

找到有关NSKeyValueObserving协议的更多文档

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html