将导航栏剪辑到滚动视图
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 setShowsHorizontalScrollIndicator:NO]; [tableView setShowsVerticalScrollIndicator:NO];从这里:***.com/questions/821818/…【参考方案4】:将您的UIToolbar
和您的UIWebView
放在同一个UIScrollView
上
【讨论】:
根据 Apple 文档,我无法将 UIWebView 嵌入到 UIScrollView。我说的是导航栏,即输入网址或 Google 搜索的栏,而不是具有后退/前进按钮的工具栏。 @Espresso 如果您可以确保 web 视图的内容不能缩放或滚动(通过使用<meta name="viewport">
标签并确保视图足够高),那么 UIWebView
在 UIScrollView
里面工作得很好。您可以使用stringByEvaluatingJavaScriptFromString:
和clientHeight
在Web 视图委托中动态执行高度操作。当然,这是一个很大的如果。以上是关于将导航栏剪辑到滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外