前言:我們知道在app中打開(kāi)Safari來(lái)顯示網(wǎng)頁(yè)的代碼
UIApplication.shared.open(url)
這次我們來(lái)學(xué)習(xí)WebView和WKWebview
1.WebView:
- 步驟1:創(chuàng)建WebView
從storyboard中拖出一個(gè)WebView
使得WebView垂直水平居中且與父視圖等寬等高約束不能是左右邊距為0 約束如下圖:
- 步驟2:將WebView于代碼關(guān)聯(lián)*
選中WebView->按住鼠標(biāo)右鍵拖入代碼->命名為 “webView”
代碼:`@IBOutlet weak var webView: UIWebView! - 步驟3:載入網(wǎng)址*
思路:在viewDidLoad方法中載入網(wǎng)頁(yè)
代碼:
override func viewDidLoad() {
super.viewDidLoad()
if let url = URL(string: "http://www.reibang.com/users/2e9195cf176a/timeline"){ //1
let request = URLRequest(url: url) //2
webView.loadRequest(request) //3
}
// Do any additional setup after loading the view.
}
注釋處代碼分析:
1.要把字符串轉(zhuǎn)換成鏈接即URL,可能會(huì)轉(zhuǎn)換失敗值為nil所以此處要用可選綁定
2.把要加載的鏈接轉(zhuǎn)化為請(qǐng)求,請(qǐng)求webView加載
3.加載網(wǎng)頁(yè)
但是.....
做完后效果并不理想,沒(méi)有加載出網(wǎng)頁(yè)。還出現(xiàn)了這么一段錯(cuò)誤:
::2015-11-17 14:16:24.017 FoodPin[1257:115282] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
為什么榕订?
注意:App Transport Security 是iOS的一項(xiàng)安全機(jī)制,默認(rèn)強(qiáng)制所有連接必須為安全鏈接即https協(xié)議。要想使用http鏈接哀托,需要手工在Info.plist里關(guān)閉ATS,而我們的鏈接并不是https協(xié)議
關(guān)閉ATS
打開(kāi)Info.plist劳秋,右擊空白處仓手,選中 Add Row,key選擇 App Transport Security Settings
運(yùn)行玻淑!
2.WKWebView
WKWebView比UIWebView速度更快嗽冒,內(nèi)存占用更少。是UIWebView的替代者补履。
我們?cè)谥皐ebView上的東西進(jìn)行修改
使用WKWebView必須導(dǎo)入WebKit框架;代碼如下:
import WebKit
- 步驟1:創(chuàng)建WKWebView*
WKWebView必須使用代碼創(chuàng)建添坊!代碼如下:在viewDidLoad添加:
webView.isHidden = true //1
let wkWebview = WKWebView(frame: view.frame) //2
view.addSubview(wkWebview) //3
注釋處分析:
1.把之前的webView隱藏
2.實(shí)例化一個(gè)WKWebView并設(shè)置大小,使其與父視圖尺寸相同
3.將WKWebView添加到父視圖的子視圖
- 步驟2:載入網(wǎng)頁(yè)*
代碼如下:
if let url = URL(string:http://www.reibang.com/users/2e9195cf176a/timeline"){
let request = URLRequest(url: url)
wkWebview.load(request)
//webView.loadRequest(request)
}
- 步驟3:修復(fù)bug*
使用WKWebView頁(yè)面如果有導(dǎo)航箫锤,會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)頭部一部分潛入到導(dǎo)航條下面贬蛙。這是因?yàn)樗赩iew Controller默認(rèn)情況下雨女,頂邊延伸到導(dǎo)航條圖層之下,導(dǎo)致了遮擋
解決方案:
同時(shí)在viewDidLoad中添加代碼速客,WKWebView 高度的自適應(yīng):
wkWebview.autoresizingMask = [.flexibleHeight]
步驟4:運(yùn)行!
3.SFSafariViewController:
SFSafariViewController相當(dāng)于一個(gè)app內(nèi)部的Safari瀏覽器戚篙,具有Safari瀏覽器的基本功能;SFSafariViewController的使用步驟十分簡(jiǎn)單溺职;使用SFSafariViewController時(shí)要導(dǎo)入SafariServices
`import SafariServices
全部代碼如下:
if let url = URL(string: "http://www.reibang.com/users/2e9195cf176a/timeline"){ //1
let sfVC = SFSafariViewController(url: url) //2
self.present(sfVC, animated: true, completion: nil) //3
}
注釋處代碼分析:
1.查看鏈接是否有效
2.實(shí)例化一個(gè)SFSafariViewController
3.現(xiàn)實(shí)SFSafariViewController
小結(jié):
本章我們學(xué)習(xí)了WebView和WKWebview以及SFSafariViewController的簡(jiǎn)單用法岔擂。WKWebview占用內(nèi)存小且速度更快推薦使用但需要用代碼實(shí)例化,注意子視圖和父視圖之間的布局浪耘!