代码之家  ›  专栏  ›  技术社区  ›  Jonathan Sterling

透明UINavigationBar下的UIWebView

  •  6
  • Jonathan Sterling  · 技术社区  · 16 年前

    我有一个UIWebView,我想把它放在半透明的UINavigationBar下。通常,当我将UIScrollView放在半透明的UINavigationBar下时,我会设置其contentOffset,这样所有内容最初都会被推到该条之后,以便可以看到它;此后,用户可以滚动文本,并将其置于条形图下方。

    问题是UIWebView似乎不是UIScrollView的适当子类;因此,我不能使用setContentOffset。是否有人有任何技巧或窍门让UIWebView通过半透明导航栏看起来很好?谢谢

    6 回复  |  直到 16 年前
        1
  •  9
  •   zeroimpl    14 年前

    从iOS 5开始,您可以使用UIWebView的scrollView属性,并设置contentInset来调整位置。

    CGFloat top = 0.0;
    
    if( self.navigationController != nil && self.navigationController.navigationBar.translucent ) {
        top = self.navigationController.navigationBar.bounds.size.height;
    }
    
    UIWebView* wv = ...
    
    wv.scrollView.contentInset = UIEdgeInsetsMake(top, 0.0, 0.0, 0.0);
    
        2
  •  3
  •   Friend_LGA    12 年前

    webView.clipsToBounds = NO;
    webView.scrollView.clipsToBounds = NO;
    

    它在bouth iOS 7&6,我没有试过,但在iOS 5上可能也一样

        3
  •  2
  •   Brandon    15 年前

    我通过将UIWebView子视图设置为“不剪裁到边界”来实现这一点,然后我可以在其顶部放置一个工具栏并获得所需的效果:

    for (UIView *subview in theWebView.subviews) {
        subview.clipsToBounds = NO;
    }
    
        4
  •  0
  •   coneybeare    16 年前

    我不确定是否有问题 方法来执行此操作。我没有尝试过,但有一个想法:

    1. 拦截所有屏幕触摸
    2. 相反,将webview向上移动x个像素,使其原点为(0,-x)。然后更改高度以添加x像素

    取回它是一样的,只是你可以通过拖动(向下滚动webview)来完成。

        5
  •  0
  •   coneybeare    16 年前

        6
  •  0
  •   Community Mohan Dere    9 年前

    随着iOS 7的出现,偏移高度现在需要包括顶部状态区域的高度。否则,iOS7设备将在导航栏下仍隐藏20像素的webview。

    here:

    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    

    这可能非常有用。 上面列出的zerotool有用代码的修改版本现在看起来可能如下所示:

    if (self.navigationController != nil && self.navigationController.navigationBar.translucent) {
        top = self.navigationController.navigationBar.bounds.size.height;
        if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
            top += [[UIScreen mainScreen] applicationFrame].origin.y;
        }
    }
    // (etc.)