2016-02-25 47 views
20

我在UIViewController實例上通過調用presentViewController:animated:completion:來提出SFSafariViewController在iOS 9中,爲什麼SFSafariViewController被推送而不是模態呈現?

的結果是,它得到上推(從右側滑入),因爲如果我在UINavigationController實例調用pushViewController:animated:。我已經證實,這一切都發生在主隊列中。而呈現視圖控制器本身並不是一個模式(反正這不應該是重要的,但以防萬一,我們可以排除這一點)。

如果我將SFSafariViewController替換爲UIViewController,它會按預期工作,它以模態方式呈現。

weakSelf.oAuthViewController = [[SFSafariViewController alloc] initWithURL:url]; 
[viewController presentViewController:weakSelf.oAuthViewController animated:YES completion:nil]; 

任何想法爲什麼或如何解決這個問題?

回答

22

這裏有一個簡單的方法來獲得垂直模式呈現:

let safari = SFSafariViewController(URL: url) 
safari.modalPresentationStyle = .OverFullScreen 
presentViewController(safari, animated: true, completion: nil) 
+0

雖然它在導航回來時效果更好,但這不是模態。 –

20

我剛剛有同樣的問題。另外,即使您沒有設置委託,完成按鈕也可以工作。不知道爲什麼會發生。但是,我發現了一個解決方法:將Safari瀏覽器控制器封裝在導航控制器中並隱藏導航欄。 iGerms的

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) 
    } 
} 
5

的Objective-C版回答:

-(void)openURL:(NSURL *)url { 
    SFSafariViewController *safariController = [[SFSafariViewController alloc]initWithURL:url]; 
    safariController.delegate = self; 
    UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:safariController]; 
    [navigationController setNavigationBarHidden:YES animated:NO]; 
    [self presentViewController:navigationController animated:YES completion:nil]; 
} 
2

要使用默認模式過渡的風格,你可以簡單地設置轉換代表等於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中提到。

相關問題