この投稿ごとに SFSafariViewController を介してアプリに URL を自動的にロードさせることができました。これはうまく機能します。唯一の欠点は navbar です。
SFSafariViewController navbar は、URL が読み取り専用であり、「完了」リンクは何もせず、ページをリロードするため、この方法で使用すると役に立たなくなります。そのため、ナビゲーションバーを完全に非表示にしたいと思います。
受け入れられた回答に添付されたコメントによると、ルートビューコントローラーを SFSafariViewController に設定することが提案されましたが、これは機能しません。前述の投稿にコードが含まれている単一のビュー コントローラーがあるため、セットアップは簡単です。
ナビゲーションバーを非表示にしながら、SFSafariViewController の利点を維持するにはどうすればよいですか? または、ナビゲーション バーを非表示にできない場合は、少なくとも「完了」リンクを非表示にしますか?
コードスニペット:
import UIKit
import SafariServices
class ViewController: UIViewController
{
private var urlString:String = "https://example.com"
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
self.presentViewController(svc, animated: true, completion: nil)
self.navigationItem.rightBarButtonItem = nil
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
----- 動作します。Navbar は「非表示」です -----
import UIKit
import SafariServices
class ViewController: UIViewController
{
private var urlString:String = "https://example.com"
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// This will remove the status (battery, time, etc) bar
UIApplication.sharedApplication().statusBarHidden = true
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
// Kind of a hack, in that we really aren't removing the navbar
// Rather we are adjusting the starting point of the vpc object so it appears as the navbar is hidden
self.presentViewController(svc, animated: true) {
var frame = svc.view.frame
let OffsetY: CGFloat = 42
frame.origin = CGPoint(x: frame.origin.x, y: frame.origin.y - OffsetY)
frame.size = CGSize(width: frame.size.width, height: frame.size.height + OffsetY)
svc.view.frame = frame
}
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// For this to work be sure to set the following setting to OFF, in info.plist
// 'View controller-based status bar appearance'
override func prefersStatusBarHidden() -> Bool {
return true
}
}