没有人知道如何停止UIWebView从反弹的垂直?我的意思是,当一个用户接触他们的手机屏幕、一拖再拖他们的手指下降,且webview显示了一个空白点上述网页我有装?

我已经看过了以下可能的解决方案,但没有人为我工作:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/996-turn-off-scrolling-bounces-uiwebview.html

http://forums.macrumors.com/showthread.php?t=619534

我如何阻止一个UIScrollView从弹跳水平?

有帮助吗?

解决方案

for (id subview in webView.subviews)
  if ([[subview class] isSubclassOfClass: [UIScrollView class]])
    ((UIScrollView *)subview).bounces = NO;

...似乎正常工作。

这将可以接受的程序,储存。

更新:在iOS5.x+有一个更简单的方法- UIWebViewscrollView 酒店,所以你的代码可以是这样的:

webView.scrollView.bounces = NO;

同去 WKWebView.

其他提示

我一直在寻找一个项目,使得它很容易建立网络应用程序为完全成熟的可安装应用程序在iPhone上称为 快速连接, ,找到一个解决方案的工作,如果你不想你的屏幕是滚动的所有,这在我的情况下我没有。

在上述项目/博客,他们提javascript功能,可以添加到关闭的反弹,这基本上归结为:

    document.ontouchmove = function(event){
        event.preventDefault();
    }

如果你想看到更多关于他们如何实现它,只是快速连接下载,并检查它。但基本上它所做的是叫那javascript页。我想只是把它放在头上我的文档,而这似乎正常工作。

好的我所做的就是:

UIView *firstView = [webView.subviews firstObject];

if ([firstView isKindOfClass:[UIScrollView class]]) {

    UIScrollView *scroll = (UIScrollView*)firstView;
   [scroll setScrollEnabled:NO];  //to stop scrolling completely
   [scroll setBounces:NO]; //to stop bouncing 

}

工作正常对我来说...还有,选择回答这个问题是一个苹果会拒绝如果你把它用在 你的iphone应用程序。

在iOS5SDK你可以访问的滚动查看相关的网页直接查看,而不是重复其有关子视图处.

所以要禁止'弹'在滚动的看,你可以使用:

myWebView.scrollView.bounces = NO;

看看 UIWebView类参考.

(但是如果你需要的支持版本的SDK前5.0,你应该跟随 波鲁辛的建议.)

Swift3

webView.scrollView.bounces = false

警告。我用setAllowsRubberBanding:在我的应用程序,并苹果拒绝,指出非公开的API职能是不允许的(引用:3.3.1)

在迅速到禁止的反弹

webViewObj.scrollView.bounces = false

布拉德的方法为我工作。如果你用它你可能希望使这一点更加安全。

id scrollView = [yourWebView.subviews objectAtIndex:0];
if( [scrollView respondsToSelector:@selector(setAllowsRubberBanding:)] )
{
    [scrollView performSelector:@selector(setAllowsRubberBanding:) withObject:NO];
}

如果苹果改变的东西然后反弹会回来-但至少你的程序不会崩溃。

IOS5只有如果你计划要让用户焦webview内容(e。i.:双击)的反弹的设置是不够的。你需要设置也alwaysBounceHorizontal和alwaysBounceVertical性不,别当他们缩小(另一双击...)以默认,它将反弹。

我走过收集的UIWebView的有关子视图处,并设定他们的背景[UIColor blackColor],同颜色的网页的背景。该景仍然会反弹,但是它将不会出现那个丑陋的黑暗灰色的背景。

它看起来对我像UIWebView有UIScrollView.你可以使用记录,APIs对于这一点,但反弹被设为双向的,不独立。这是在API文档。UIScrollView具有弹性,因此这样的事情作品(不知道如果有多于一个滚动型):

NSArray *subviews = myWebView.subviews;
NSObject *obj = nil;
int i = 0;
for (; i < subviews.count ; i++)
{
    obj = [subviews objectAtIndex:i];

    if([[obj class] isSubclassOfClass:[UIScrollView class]] == YES)
    {
        ((UIScrollView*)obj).bounces = NO;
    }
}

我很恼火是为了找出UIWebView不是一个滚动看来,所以我做了一个自定义的子类,以获得在该网页查看的滚动图。这suclass包含一个滚动的看法,所以你可以定制的行为网络图。的警句的这个类别是:

@class CustomWebView : UIWebview
...

- (id) initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
// WebViews are subclass of NSObject and not UIScrollView and therefore don't allow customization.
// However, a UIWebView is a UIScrollViewDelegate, so it must CONTAIN a ScrollView somewhere.
// To use a web view like a scroll view, let's traverse the view hierarchy to find the scroll view inside the web view.
for (UIView* v in self.subviews){
    if ([v isKindOfClass:[UIScrollView class]]){
        _scrollView = (UIScrollView*)v; 
        break;
    }
}
return self;

}

然后,在创建一个定制网站查看,可以禁止跳动:

customWebView.scrollView.bounces = NO; //(or customWebView.scrollView.alwaysBounceVertically = NO)

这是一个伟大的通用方法,使一个网络视与定制的滚动行为。只是有几件事看出:

  • 作为与任何看来,你也需要重写-(id)initWithCoder:如果你用它在口生成器
  • 在最初创建一个网上看,其内容大小都是同样大小的图的框架。之后你滚动的网页,该内容表示的尺寸大小的实际网页的内容。为了解决这个问题,我没有的东西哈克-呼叫-setContentOffset:CGPointMake(0,1)动:是强制无法察觉的变化,将设置适当的内容大幅图。

碰到这个寻找答案我最终只是运气就回答我自己的弄乱有关。我有没有

[[webview scrollView] setBounces:NO];

和它的工作。

这个工作对我来说,和美丽的太(我采用。与webView)

[[webView.webView scrollView] setScrollEnabled:NO];

[[webView scrollView] setScrollEnabled:NO];

我试过了一个稍微不同的方法,以防止 UIWebView 目的滚动和反弹:增加一个手势识别器以复盖其他手势。

现在看来, UIWebView 或滚轮子视图使用自己的泛的手势识别来检测用户的滚动。但是,根据苹果文件有一个合法方式重写一个手势识别器有另一个。 UIGestureRecognizerDelegate 协议具有一个方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithgesturerecognizer: -它允许的行为进行控制的任何碰撞势的识别器。

因此,我所做的就是

在图控制器的viewDidLoad方法:

// Install a pan gesture recognizer                                                                                        // We ignore all the touches except the first and try to prevent other pan gestures                                                     
// by registering this object as the recognizer's delegate                                                                                        
UIPanGestureRecognizer *recognizer;                                                                                                               
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];                                                   
recognizer.delegate = self;                                                                                                                       
recognizer.maximumNumberOfTouches = 1;                                                                                                            
[self.view addGestureRecognizer:recognizer];                                                                                                          
self.panGestureFixer = recognizer;                                                                                                                  
[recognizer release]; 

然后,手势替代方法:

// Control gestures precedence                                                                                                                            
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer                                                                                        
        shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer                                                  
{                                                                                                                                                         
        // Prevent all panning gestures (which do nothing but scroll webViews, something we want to disable in                                          
        // the most painless way)                                                                                                                         
        if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])                                                                        
        {
            // Just disable every other pan gesture recognizer right away                                                                             
            otherGestureRecognizer.enabled = FALSE;
        }                                                                                                                                                  
        return NO;                                                                                                                                        
}              

当然,这一委派的方法可以我更加复杂在实际应用程序-我们可以禁用其他识别器有选择地分析 otherGestureRecognizer.看 并作出决定的依据是什么,看它是。

最后,为了完整性的方法,该方法我们注册为一个泛处理程序:

- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer 
{ 
    // do nothing as of yet
}

它可以是空的,如果我们想要的是取消网景'的滚动和反弹,或者它可以包含我们自己的代码实施的那种泛的运动和动画我们真的想...

迄今为止我只是在尝试与所有这些东西,并且它似乎是工作或多或少是因为我想要它。我没有试图提交的任何应用程序,网上商店然而,虽然。但我相信我没有用任何东西无证迄今为止...如果有人发现它,否则,请通知我。

这里是两个较新的潜在解决方案。显然,你可以使用jqtouch或pastrykit禁用滚动。然而,我还没有得到这些工作。你可能会更加称职。

关掉下滚动

挖掘成pastrykit

固定定位移动safari

这个链接帮助了我很多。。...其容易..那是一个演示..

(低5iOS7SDK例)这是一个普遍的应用程序,例如使用滚动型setBounces功能。它是一个开放源码项目/例如位于: 链接到SimpleWebView(项目Zip和源码的例子)

一个有关子视图处的 UIWebView 应该是一个 UIScrollView.设置它 scrollEnabled 酒店来 NO 和网页查看会有滚动的障碍。

注:这在技术上是利用私人API,因此你的应用程序,可以拒绝或崩溃,在将来的操作系统版本.使用 @tryrespondsToSelector

看看 bounces 酒店的 UIScrollView.谈论的苹果文档:

如果财产的价值是 YES (默认)、滚动视反弹,当遇到一个边界的内容。弹跳视觉上表示的滚动已达到一个边缘内容。如果价值是 NO, 滚动立即停止在边界的内容没有反弹。

确保你们使用正确的 UIScrollView.我不知道什么层次看起来像一个 UIWebView, 但滚动查看可能是一个父,不是一个孩子的 UIWebView.

禁用 UIWebView 滚你可以使用以下行代码:

[ObjWebview setUserInteractionEnabled:FALSE];

在这个例子中, ObjWebview 的类型 UIWebView.

webView。滚动型.scrollEnabled=否;webView。滚动型.反弹=否;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top