WKWebViewを使った理由
ロジックで作成したHTML文字列をそのまま表示したかった。
UIWebViewだと一時ファイルを作成して、そのファイルを読み込む必要があったため。
WKWebViewの特徴
- Storyboardから設定できない
- コード上で定義してaddSubViewする必要あり
- AutoLayoutもコード上から定義する必要あり
やりたき事
- 画面いっぱいにWKWebViewを表示
- 上記を実現する制約を追加
実装
Webのいろんな情報を参考にしてこんな実装になりました。
やりたい事がまとまった情報があまりなかった。
(WKWebViewはiOS 8以降対応のため、まだそれほど使われていない?)
private var webView: WKWebView!
required init?(coder aDecoder: NSCoder)
{
super.init(nibName: nil, bundle: nil)
webView = WKWebView()
}
override func viewDidLoad()
{
super.viewDidLoad()
setupSubViews()
if let htmlString = htmlString {
webView.loadHTMLString(htmlString, baseURL: nil)
}
}
private func setupSubViews()
{
webView.navigationDelegate = self
webView.scrollView.delegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(webView)
var viewBindingsDict = [String: AnyObject]()
viewBindingsDict["webView"] = webView
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewBindingsDict))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewBindingsDict))
}
ちなみに
このような実装でも良いようです。シンプルですね。
http://qiita.com/hanamiche/items/b0e576b7d3c87ca9cb99
より一部抜粋
var _webkitview: WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//3.WebKitのインスタンス作成!
self._webkitview = WKWebView()
//4.ここでWebKitをviewに紐付け
self.view = self._webkitview!
//5.URL作って、表示させる!
var url = NSURL(string:"http://www.yahoo.co.jp/")
var req = NSURLRequest(URL:url)
self._webkitview!.loadRequest(req)
}
#その他参考情報