当alpha设置为0时,iOS10 SFSafariViewController无法正常工作

ori*_*rel 7 cookies objective-c install-referrer sfsafariviewcontroller ios10

我正在使用SFSafariViewController在我的应用程序中获取用户的cookie.这是我的代码:

SFSafariViewController *safari = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:referrerUrl] entersReaderIfAvailable:NO];
    safari.delegate = self;
    safari.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    safari.view.alpha = 0.0;
    safari.view.hidden = true;
    [self dismissViewControllerAnimated:false completion:nil];
    NSLog(@"[referrerService - StoreViewController] presenting safari VC");
    [self presentViewController:safari animated:false completion:nil];
Run Code Online (Sandbox Code Playgroud)

这在iOS 9上运行良好.但在iOS 10上,似乎SF控制器不起作用(它也阻止了我当前的上下文 - 恰好是另一个UIWebView).

任何人都可以建议隐藏SFSafariViewController的替代方法?

Rom*_*lov 12

更新的答案:

Apple禁止在最新版本的审核指南中使用此类SafariViewController :

必须使用SafariViewContoller向用户显示信息; 控制器可能不被其他视图或层隐藏或遮挡.此外,应用程序可能无法使用SafariViewController在未经用户知情和同意的情况下跟踪用户.

老答案:

在iOS 10中,还有一些额外的要求SFSafariViewController:

1)您的视图不应隐藏,因此hidden应设置为NO

2)alphais 的最小值0.05

3)您需要使用addChildViewController:/ 手动添加控制器didMoveToParentViewController:(否则不会调用回调).

4)UIApplication.keyWindow.frame并且SFSafariViewController.view.frame应该具有非空交叉(在适当的坐标空间中),这意味着:

  • safari视图大小应大于 CGSizeZero

  • 你不能把野生动物园视图放在屏幕上

  • 但您可以在自己的视图下隐藏Safari视图

代码示例:

self.safariVC = [[SFSafariViewController alloc] initWithURL:referrerUrl];
self.safariVC.delegate = self;
self.safariVC.view.alpha = 0.05;
[self addChildViewController:self.safariVC];
self.safariVC.view.frame = CGRectMake(0.0, 0.0, 0.5, 0.5);
[self.view insertSubview:self.safariVC.view atIndex:0];
[self.safariVC didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

另外,请勿忘记safariVC在使用结束后正确删除:

[self.safariVC willMoveToParentViewController:nil];
[self.safariVC.view removeFromSuperview];
[self.safariVC removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)


Zor*_*ayr 0

我能够使用不可见的子视图控制器来实现这种效果:

_safariViewController = [[SFSafariViewController alloc] initWithURL:_requestURL];
_safariViewController.delegate = self;
_safariViewController.view.userInteractionEnabled = NO;
_safariViewController.view.alpha = 0.0;
[_containerViewController addChildViewController:_safariViewController];
[_containerViewController.view addSubview:_safariViewController.view];
[_safariViewController didMoveToParentViewController:_containerViewController];
_safariViewController.view.frame = CGRectZero;
Run Code Online (Sandbox Code Playgroud)