- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 UIScrollView 中有一个 UIWebView。
这个想法是为了能够在用户向上滚动网页时在屏幕上创建更多阅读空间 - 通过向上滚动 UIScrollView 直到工具栏可见,显然当工具栏不再可见时,实际滚动网页以显示页面上的更多内容。
iPhone Safari 浏览器具有完全相同的功能。
请参阅屏幕截图(第一个)了解我得到的默认行为 - 我猜是因为:滚动消息被 webview 使用,因为触摸/滚动直接发生在 webview 区域。
我想在这里做的是编程决定何时将“向上滚动”转发到 UIScrollivew 以及何时不转发。
有关如何解决此问题的任何提示都将非常有帮助。谢谢!!
最佳答案
UIWebView class reference不鼓励在 UIScrollView 中嵌入 UIWebView:
Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.
不过我想你还是想实现你的功能 ;-)
想法 1:不要将 UIWebView 嵌入到 UIScrollView 中,而是使用 UIWebView 的 stringByEvaluatingJavaScriptFromString:
方法运行 javascript,修改 DOM 以在下方添加工具栏。如果需要,您可以通过注册一些自定义 URL 方案从工具栏上按下的任何按钮回调 Objective-C 代码。
想法 2:不要将 UIWebView 嵌入到 UIScrollView 中,而是嵌入到普通的 UIView 中。根据 Vignesh 的建议,通过委托(delegate)监听 webView 的内部 ScrollView 的 scrollViewDidScroll:
回调,分别检查 contentOffset
与 contentSize
的高度调用回调的时间。一旦它们相等,就意味着你到了底部。一旦发生这种情况,您可以为工具栏的框架设置动画以“进入”包含的 UIView 并将 webView 的框架“推开”。
思路三:忽略苹果的建议,将UIWebView嵌入到UIScrollView中。根据 Vignesh 的建议,通过委托(delegate)监听 webView 的内部 ScrollView 的 scrollViewDidScroll:
回调,分别检查 contentOffset
与 contentSize
的高度调用回调的时间。一旦它们相等,就意味着你到了底部。一旦发生这种情况,将 webView 的 userInteractionEnabled
属性设置为 NO,并在包含 webView 和工具栏的 scrollView 上将其设置为 YES。希望卷轴能够顺利进行。当然,您必须以相同的方式收听包含的 ScrollView ,以确定何时切换回 userInteractionEnabled
。
这个想法的一个变体是将 webView 的 userInteractionEnabled
设置为 NO,但设置 webView 的框架高度以匹配其 contentSize,并相应地扩大包含 scrollView 的 contentSize。
这两种变体都有缺点,在某些情况下您将无法执行诸如单击链接之类的操作 :-( 但也许这对您的情况来说已经足够了。至少在第一个变体中还不错。
关于ios - 如何将 UIWebView 滚动转发到 UIScrollView ? (有条件的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700972/
抱歉这个奇怪的标题,但是,这正是我所需要的。我知道这是可以做到的,因为我见过其他应用程序这样做。 基本上,我的应用程序有一个启用分页的大 ScrollView ,其中包含一些嵌套的 ScrollVie
我还没有尝试过,但我假设一旦我知道用户想要在子 ScrollView 中滚动,我就必须禁用父 ScrollView 的滚动,对吗? 两个 ScrollView 都是水平滚动的。 如何暂时禁用父级的滚动
我需要实现这个方法: - (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center { 但我不知道如何获得我需要的中心坐标。通常
我想根据 UIAccelerometer 值滚动 ScrollView 。实现这一目标的最佳方法是什么? 最初,我根据获得的加速度计值将内容偏移设置为一个值。然后在每个 scrollViewDidEn
我有一个 UIScrollView,我需要底部淡入透明,这样它就不会突然切断内容。 UIScrollView 的背景是自定义颜色。这是我到目前为止所拥有的,但图层显示为白色,而不是自定义颜色。这就是我
我有一个 UIScrollviews 彼此存在的层次结构。 如何将特定区域的滑动事件重定向到内部 ScrollView ? 最佳答案 如果您将 UIScrollViews 设置为只能在一个轴或另一轴上
在我的应用程序中,我有一个扩展 UIScrollView 并在用户滚动时填充其内容的 View 。但是,如果用户滚动太快,则 UIScrollView 内填充的 View 不会及时创建,您实际上可以看
我有一个包含内容的 UIScroll View 。如果该内容溢出,使 ScrollView 可滚动,我想将 View 的底部设置为某种颜色。如果没有,我想将其设置为不同的颜色。 我的问题是,我不知道如
我有一个 ScrollView ,其中包含一个 UIImageView,以及一个额外的 UIScrollView 和 UIImageView。 我想要实现的是独立缩放和平移每个 ScrollView
类似的问题也有人问过这个,但我的困境其实和他们正好相反。我有一个全屏、分页 UIScrollView,每个页面都是屏幕的大小。在其中,我有一些页面本身就是 UIScrollViews,它们的宽度大于屏
我有一个 UIScrollView 和另一个 UIScrollView 。它们都水平滚动并且具有 pagingEnabled = YES。假设我开始滚动内部 ScrollView 并到达最右边界。如果
我有一个 UIScrollView,里面有一个(自定义)UIView。 在我的 scrollViewDidScroll 方法中,我正在调用 [myCustomView setNeedsDisplay]
我有一个水平滚动的 UICollectionView,其中填充了垂直滚动的 UITableViews(两者都是 UISCrollView 的子类)。当滚动手势开始沿任一方向滚动时,在其减速完成之前不会
iOS 8, swift 。我试图在水平 ScrollView 上创建垂直 ScrollView 。它们都是 UIScrollView。垂直 ScrollView 允许从底部向上滑动 View 。顶部
我需要一个分页的 UIScrollView,它以 UIScreenEdgePanGestureRecognizer 的方式检测屏幕边缘的平移,而不是像 UIPanGestureRecognizer 那
假设我有多个 ScrollView ,并且我希望在任何给定时间只打开其中一个 (scrollView.contentOffset != 0)。因此,当 scroll view 1 打开且 scroll
我在分页 UIScrollView(外部)中的 VC 中有 UIScrollView(内部 - UICollectionView 是诚实的)。两者都是水平的。当我向内滚动到边缘(左侧或右侧)时,它开始
如何在不干扰现有 UIScrollView 的情况下从现有 UIScrollView 获取重复的 UIScrollView。 第一个 ScrollView , UIScrollView *firstS
我的应用程序中有一个点,我删除了一个 ScrollView 并添加了另一个。我希望新 ScrollView 中也能出现上一个 ScrollView 中的相同手势。我尝试过: s
请告诉我如何在类似嵌套进程的 ScrollView 中设置 ScrollView 。 以下代码部分有效。 int x=10; int y=10; for(int i=0; i<5; i++) {
我是一名优秀的程序员,十分优秀!