UIWebView 部分可操作

Posted

技术标签:

【中文标题】UIWebView 部分可操作【英文标题】:UIWebView partially operable 【发布时间】:2013-07-28 10:33:20 【问题描述】:

我的 UIWebView 有一个非常奇怪的问题: 我的 appdelegate 中有一个功能,可以打开 UIWebView 来显示我的隐私政策。该函数从两个不同的视图中被调用两次。一次是用户点击登录屏幕上的按钮,一次是用户点击视图上的按钮,该视图位于谷歌地图视图的顶部。 当从登录视图调用该函数时,一切正常,我可以,但是当从另一个视图调用该函数时,UIWebView 出现但不完全可操作(用于测试我加载 google.com): 我无法滚动,也无法打开大部分链接,唯一响应触摸事件的元素在此图中标记:

我的代码来了: 在我的 appdelegate 中,我有:

- (void)showPrivacy:(UIView *)view

    overlay = [[UIView alloc] initWithFrame:view.frame];
    overlay.backgroundColor = [UIColor blackColor];
    overlay.alpha = 0;
    [view addSubview:overlay];

    privacyView = [[WPPrivacyView alloc] initWithFrame:CGRectMake(15, 40, view.frame.size.width-30, view.frame.size.height-75)];
    privacyView.layer.shadowColor = [UIColor blackColor].CGColor;
    privacyView.layer.shadowOffset = CGSizeMake(0, 1);
    privacyView.layer.shadowOpacity = 0.75;
    privacyView.layer.shadowRadius = 20.0f;
    privacyView.userInteractionEnabled = YES;
    privacyView.scrollView.scrollEnabled = YES;
    privacyView.scrollView.bounces = NO;
    privacyView.scalesPageToFit = YES;
    [view addSubview:privacyView];

    [UIView animateWithDuration:0.1 animations:^
        privacyView.alpha = 1;
    ];

    privacyView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);

    CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
    bounceAnimation.values = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.1],
                          [NSNumber numberWithFloat:1.1],
                          [NSNumber numberWithFloat:0.95],
                          [NSNumber numberWithFloat:1.0], nil
                          ];

    bounceAnimation.duration = 0.3;
    bounceAnimation.removedOnCompletion = NO;
    [privacyView.layer addAnimation:bounceAnimation forKey:@"bounce"];

    privacyView.layer.transform = CATransform3DIdentity;

要隐藏我调用的视图: -(无效)隐藏隐私 [UIView animateWithDuration:0.3 动画:^ 隐私视图.alpha = 0; privacyView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1); 完成:^(布尔完成) [privacyView removeFromSuperview]; ]; showPrivacy 函数从登录视图和地图视图中调用,如下所示:

WPAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
[appDelegate showPrivacy:self.view];

那么为什么一切正常,当 web 视图出现在登录视图时,为什么我可以操作一些元素,但不是全部,当它出现在地图视图时?

【问题讨论】:

【参考方案1】:

因为您将叠加视图添加为子视图。这意味着超级视图将涉及用户交互,并且某些事件将被“窃取”或阻止。特别是滚动,它使用手势识别器。

您可能想要更改您的设计,以便在您的叠加层中呈现一个模态视图控制器。如果您希望背景是原始视图,那么您可以在呈现模态之前获取它的图像。

【讨论】:

以上是关于UIWebView 部分可操作的主要内容,如果未能解决你的问题,请参考以下文章

可编辑的 UIWebview 滚动问题

仅在 UIWebView 中显示网站的一部分

如何使用 UITableView 创建包含 UIWebView 的可滚动视图

0926-UIWebView

在 UIWebView 中加载 html 内容 - iOS

带有 UIWebview 的 UITableViewCell,可根据内容大小调整高度