2016-09-22 61 views
2

我正在開發一個顯示本地存儲的HTML內容的應用程序。WKWebView添加到子視圖中,並將大小設置爲父級?

我的故事板場景由一個自定義的菜單視圖('MyMenuBar')和一個'containerView'組成,我希望HTML被加載。這兩個項目在故事板中都有適當的限制。

我試圖使用WKWebView,由蘋果公司推薦。我想添加WKWebView作爲'containerView'的子視圖,並給它相同的約束,但我無法得到這個權利。內容從屏幕邊緣掉落,或根本不顯示。

以下是我有:

@IBOutlet weak var MyMenuBar: UIView! 
@IBOutlet weak var containerView: UIView! 

... 
var myWebView: WKWebView? 

//View did load... 
webViewWK = WKWebView() 

containerView.addSubview(myWebView!) 
myWebView?.frame = containerView.frame 

myWebView?.load(localFileURL!) 

我不知道是怎麼回事錯在這裏。我曾嘗試:

view.insertSubview(myWebView!, belowSubview: MyMenuBar) 

containerView = myWebView! 

但這些就什麼都不顯示。我也曾嘗試:

myWebView?.translatesAutoresizingMaskIntoConstraints = false 

不過,我還是遇到同樣不尋常的佈局問題具有正確縮放內容,以及脫落的畫面。

我可以通過在故事板上簡單地使用UIWebView來解決這個問題,但是我想要WKWebView的性能和麪向未來的解決方案,並且無法理解爲什麼我不能用正確的約束以編程方式添加它。

我使用的Xcode 8.0和斯威夫特3

非常感謝

回答

1

我認爲這個問題是與線:

MyWebView?.frame = containerView.frame 

請記住,當你一個子視圖添加到一個容器視圖,子視圖的框架必須在相對於父視圖的座標中指定。例如,如果您的容器視圖的座標原點爲(100,100),則這意味着Web視圖的原點將位於容器視圖(100,100)的偏移處,而不是容器的原點視圖。

指定幀的正確方法應該是:

myWebView?.frame = CGRect(origin: CGPoint.zero, size: containerView.frame.size) 

我想這應該解決您的問題。希望有所幫助!

+0

感謝您的回覆,但不幸的是這並未解決問題。超級查看約束的尾部空間每次都會中斷,而控制檯中沒有解釋。 –

5

什麼工作對我來說是指定除了COORDS爲sublayout的自動尺寸面具,從Sparky的回答

myWebView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
myWebView.frame = CGRect(origin: CGPoint.zero, size: containerView.frame.size) 
+0

似乎不適合我。無論我如何配置容器視圖,Web視圖仍然是全屏。介意分享你的代碼? – yang

0

嘗試暗示把你的代碼到viewDidAppear而不是viewDidLoad中。這對我的作品與斯帕克的答案:

videoWebKitView = WKWebView(frame: CGRect(origin: CGPoint.zero, size: videoContainer.frame.size)) 

videoContainer.addSubview(videoWebKitView) 

它不爲我工作,直到我將我的代碼。

相關問題