将导航栏剪辑到滚动视图

Posted

技术标签:

【中文标题】将导航栏剪辑到滚动视图【英文标题】:Clip navigation bar to a scroll view 【发布时间】:2011-02-12 20:42:44 【问题描述】:

在 Safari 中导航栏随 Web 视图滚动的行为相同。

我试过有两个滚动视图。第一个滚动视图是导航栏的容器,第二个滚动视图隐藏了滚动指示器。它可以工作(导航栏滚动)几乎就像 Safari 中的导航栏,但有以下问题:

第二个滚动视图上的滚动指示器是隐藏的,即使我没有将属性showsScrollIndictor 设置为NO。 当我点击状态栏时,它不会滚动到第一个滚动视图的顶部(嵌套器)

【问题讨论】:

尝试设置滚动视图的属性ScrollToTop。 【参考方案1】:

好吧,如果您不介意修改视图树,只需将其作为子视图添加到 WebView 的滚动视图中,然后将其他所有内容向下推即可。我在 Apple 的 UICatalog 中尝试过(WebViewController.m,而不是 [self.view addSubview:urlField];),它似乎可以工作

UIScrollView * myScrollView;
for (UIView * view in [myWebView subviews]) 
    if ([view isKindOfClass:[UIScrollView class]]) 
    myScrollView = (UIScrollView *) view;  //probably first, but ya never know
    


for (UIView * view in [myScrollView subviews]) 
     CGRect tempFrame = view.frame;
     tempFrame.origin.y  += kTextFieldHeight;
     view.frame = tempFrame;

[myScrollView addSubview:urlField];

为了让它更漂亮,你还需要将 textFieldFrame 中的“kTweenMargin”替换为 0 并移除 webFrame 调整:

   webFrame.origin.y += kTopMargin + 5.0;  
   webFrame.size.height -= 40.0; 

【讨论】:

嗯。重新阅读问题,看起来您只是将 Safari 用作示例,您实际上并不想要 webview?示例原则是否适用,只需将 NavigationBar 放在 scrollView 上吗?是不是你不想水平滚动?然后你可以实现 UIScrollViewDelegate 并在发生滚动或缩放时调整导航栏的框架。【参考方案2】:

显然,这不是标准行为,这意味着 hacky 可能是唯一的方法。

您可以尝试阻止滚动视图进行除滚动之外的任何交互,而是将触摸事件传递给 UIWebView。在您的主控制器中执行此路由。

还有可能发生的情况是 Safari 没有使用标准工具栏——它可能是 Safari 将一些 html 注入网页代码。 UIWebView 确实有 loadHTML: 或类似的方法; Apple 可以简单地添加一些 javascript/图像来充当工具栏。

最难的 hack 是检测用户在 web 视图中滚动了多远,然后将 web 视图向上移动,工具栏从屏幕顶部移出相同的量,直到工具栏关闭,然后继续正常滚动。

【讨论】:

这是可能的,但是当它滚动到(顶部)负范围时,它如何移动滚动指示器?这就是我尝试使用嵌套滚动视图完成的工作。除上述问题外,嵌套滚动视图仅在第二个滚动视图到达顶部时才控制一次。 可能没有办法解决这个问题。我看的越多,似乎苹果使用的一些定制解决方案就越多。您可以尝试绘制自己的滚动指示器吗?让灰色矩形或拉伸椭圆上下移动不会太难,并且您可以在用户滚动到最后时“压缩”它的大小……不要卡在将效果精确复制到像素上。无论如何,如果您这样做,您可能会遇到审批人员的麻烦。【参考方案3】:

尝试将导航控制器的 y 值设为 500,看看是否可以滚动它。如果可以,那么问题是它不会滚动到负范围内。

【讨论】:

指示灯亮或灭。据我所知,没有办法解决。 [tableView setShowsHorizo​​ntalScrollIndicator:NO]; [tableView setShowsVerticalScrollIndicator:NO];从这里:***.com/questions/821818/…【参考方案4】:

将您的UIToolbar 和您的UIWebView 放在同一个UIScrollView

【讨论】:

根据 Apple 文档,我无法将 UIWebView 嵌入到 UIScrollView。我说的是导航栏,即输入网址或 Google 搜索的栏,而不是具有后退/前进按钮的工具栏。 @Espresso 如果您可以确保 web 视图的内容不能缩放或滚动(通过使用<meta name="viewport"> 标签并确保视图足够高),那么 UIWebViewUIScrollView 里面工作得很好。您可以使用stringByEvaluatingJavaScriptFromString:clientHeight 在Web 视图委托中动态执行高度操作。当然,这是一个很大的如果

以上是关于将导航栏剪辑到滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图导航错误[关闭]

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

图像视图在滚动视图中隐藏导航栏

iOS导航栏在滚动时被隐藏(也是一种滚动),无论它在滚动视图之外

隐藏导航栏并移动表格视图部分标题

如何在滚动时隐藏导航栏,除非在屏幕顶部