Ответ 1
Для выполнения этой работы вам необходимо выполнить следующие действия:
- Подключите
UIWebView
от ниба к розетке в контроллере просмотра. - Отключить прокрутку в веб-представлении
- Задайте ограничения на
UIScrollView
,UIView
поверх веб-представления (в моем примере я пропустил все метки в этом представлении) иUIWebView
. - Подключите ограничение UIWebView
height
к розетке в вашем контроллере просмотра. - Установите контроллер вида как
UIWebViewDelegate
- В
webViewDidFinishLoad
установите константу ограничения высоты в высотуcontentSize
прокрутки в веб-представлении. - Начать отслеживание ключевых значений в contentSize для изменения высоты, когда высота веб-представления должна измениться, поскольку сегменты веб-страницы меняют свой размер без перезагрузки страницы (например, аккордов или меню).
Я не буду подробно объяснять эти ограничения, поскольку вы, кажется, уже разобрались в себе. Вот скриншот ограничений:
Итак, вот код:
import UIKit
var MyObservationContext = 0
class ViewController: UIViewController {
@IBOutlet weak var webview: UIWebView!
@IBOutlet weak var webviewHeightConstraint: NSLayoutConstraint!
var observing = false
override func viewDidLoad() {
super.viewDidLoad()
webview.scrollView.scrollEnabled = false
webview.delegate = self
webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.de/intl/de/policies/terms/regional.html")!))
}
deinit {
stopObservingHeight()
}
func startObservingHeight() {
let options = NSKeyValueObservingOptions([.New])
webview.scrollView.addObserver(self, forKeyPath: "contentSize", options: options, context: &MyObservationContext)
observing = true;
}
func stopObservingHeight() {
webview.scrollView.removeObserver(self, forKeyPath: "contentSize", context: &MyObservationContext)
observing = false
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
guard let keyPath = keyPath else {
super.observeValueForKeyPath(nil, ofObject: object, change: change, context: context)
return
}
switch (keyPath, context) {
case("contentSize", &MyObservationContext):
webviewHeightConstraint.constant = webview.scrollView.contentSize.height
default:
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
}
extension ViewController: UIWebViewDelegate {
func webViewDidFinishLoad(webView: UIWebView) {
print(webView.request?.URL)
webviewHeightConstraint.constant = webview.scrollView.contentSize.height
if (!observing) {
startObservingHeight()
}
}
}