WKWebView не изменяет размер при изменении содержимого

WKWebView не изменяет размер при изменении содержимого.

Вот фрагмент кода:

@IBOutlet weak var containingView: UIView!
var webView: WKWebView! 

override func viewDidLoad()
{
    super.viewDidLoad()

    let contentController = WKUserContentController();
    self.webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: WKWebViewConfiguration())
    self.webView.autoresizingMask = [.FlexibleHeight]
    self.webView.loadHTMLString(__, baseURL: __))
    self.webView.scrollView.bounces = false
    self.webView.scrollView.scrollEnabled = false

    self.containingView.addSubview(self.webView)
}

Какую функцию следует добавить, чтобы я мог перехватить изменение размера содержимого и соответствующим образом изменить размер содержимого?


person Luda    schedule 07.06.2016    source источник
comment
webview автоматически прокручивается, так зачем вам его высота, чтобы изменить содержимое?   -  person Shubhank    schedule 07.06.2016
comment
Я не хочу, чтобы его можно было прокручивать. Я хочу, чтобы содержащее представление масштабировалось в соответствии с веб-контентом.   -  person Luda    schedule 07.06.2016
comment
вам нужно будет использовать javascript для определения высоты содержимого веб-просмотра и установки высоты вручную   -  person Shubhank    schedule 07.06.2016


Ответы (2)


Что мешало мне, так это иметь небольшую начальную высоту WKWebView

webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, 150), configuration: configuration)

вместо

webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: configuration)
person Luda    schedule 09.06.2016

Концептуально в задаче c вы должны сделать, как показано ниже.

Две вещи: убедитесь, что у вас есть эти свойства:

self.webView.scalesPageToFit = YES;
self.webView.contentMode = UIViewContentModeScaleAspectFit;

И, наконец, рассчитайте высоту содержимого webView, так как: — webView.isLoading — одно из самых важных свойств. На самом деле при одном вызове веб-адреса он вызывается несколько раз.

- (void)webViewDidFinishLoad:(UIWebView *)webView{
if (webView.isLoading == NO)// as it is called multiple times so wait untill last call
{
 CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
}

}

Вот как вы должны вычислить высоту веб-просмотра.

вы можете посмотреть здесь, так как WKWebView не имеет удаления, которое вы можете использовать для получения размера контента, вместо этого используйте KVO:

пример KVO Может быть, это будет помочь вам больше!

person maddy    schedule 07.06.2016
comment
Я использую WKWebView. У него нет свойства scalesPageToFit - person Luda; 07.06.2016
comment
Но скажем, я меняю свою реализацию на UIWebView, но в некоторых случаях webViewDidFinishLoad не вызывается, даже если содержимое на экране меняется. - person Luda; 07.06.2016
comment
вебвиевдидфинишлоад ?? вы уверены, что установили делегата - person maddy; 07.06.2016
comment
это WKWebView, а не UIWebView - person Sergio Andreotti; 03.01.2017