我通过在UIViewController
实例上调用presentViewController:animated:completion:
来呈现一个SFSafariViewController
。
结果是它被推入(从右边滑入),就像我在UINavigationController
实例上调用pushViewController:animated:
一样。我已经验证了这一切都发生在主队列上。并且呈现的视图控制器本身并不是一个模态(这无论如何都不重要,但为了以防万一,我们可以排除它)。
如果我用UIViewController
替换SFSafariViewController
,它会像预期的那样工作,它以模态的形式呈现。
weakSelf.oAuthViewController = [[SFSafariViewController alloc] initWithURL:url];
[viewController presentViewController:weakSelf.oAuthViewController animated:YES completion:nil];
你知道为什么或者如何解决这个问题吗?
发布于 2016-08-19 20:55:29
下面是获取SFSafariViewController
垂直模式表示的一种简单方法
let safari = SFSafariViewController(URL: url)
safari.modalPresentationStyle = .overFullScreen
presentViewController(safari, animated: true, completion: nil)
发布于 2016-03-04 03:00:26
我也有同样的问题。此外,即使您没有设置代理,done按钮也可以工作。不知道为什么会这样。然而,我发现了一个解决办法:将safari控制器包装在导航控制器中,并隐藏导航栏。
func openURL(url:NSURL) {
if #available(iOS 9.0, *) {
let safariController = SFSafariViewController(url: url)
safariController.delegate = self
let navigationController = UINavigationController(rootViewController: safariController)
navigationController.setNavigationBarHidden(true, animated: false)
self.present(navigationController, animated: true, completion: nil)
} else {
UIApplication.sharedApplication().openURL(url)
}
}
发布于 2017-10-15 10:15:41
要使用默认的模式转换样式,只需将转换代理设置为self即可。
let svc = SFSafariViewController(url: url)
svc.transitioningDelegate = self //use default modal presentation instead of push
present(svc, animated: true, completion: nil)
您需要在视图控制器中采用UIViewControllerTransitioningDelegate
协议,但没有必需的功能来实现。
这是在Session 225 at WWDC, What's New in Safari View Controller中提到的。
https://stackoverflow.com/questions/35629063
复制相似问题