键入时如何更改 UIWebview 高度?

Posted

技术标签:

【中文标题】键入时如何更改 UIWebview 高度?【英文标题】:How to Change UIWebview height when typing? 【发布时间】:2013-10-24 11:10:25 【问题描述】:

我正在使用UIWebView 创建富文本编辑器。此 Web 视图放置在 UITableView 的自定义单元格内

在 webview 中输入时我需要更改单元格大小。我想在打字时获得 webview 的高度。 webview 内部没有滚动。

这是webview初始内容,

NSString* plainContent = @"Edit here.....";
NSString* htmlContentString = [NSString stringWithFormat:
                               @"<html>"
                               "<body>"

                               "<div id=\"content\" contenteditable=\"true\" style=\"font-family: Arial\">"
                               "%@"
                               "</div>"

                               "</body></html>", plainContent];

[_webView loadHTMLString:htmlContentString baseURL:nil];

如何在输入时更改UIWebView 的高度?

【问题讨论】:

【参考方案1】:

因为 UIWebView 是 UITableViewCell 的子视图,如果你想增加 webview 的大小,你必须增加 UITableView 的大小,请看这个线程,这更接近你想要的。

Can the height of a UITableViewCell be changed without reloading the table view?

increase uitableviewcell height simultaneously increasing the inner UITextView

谢谢。

【讨论】:

我想根据打字来获取UIwebview的高度。我需要知道打字时如何获取uiwebview。之后我可以更改表格视图的高度。 您可以使用 webView.scrollView.contentSize.height 获取它。 是的,谢谢它的工作。当我输入它时会增加高度。但是当我删除文本时,它不会降低高度。为什么?【参考方案2】:

我知道这是不久前被问到的,但我正在努力解决这个问题,我发现了处理这个问题的方法。简而言之,处理这个问题的最好方法是通过以下方式使用 javascriptCore.framework

    let context = self.webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as JSContext
    var callbackHandler : @objc_block (JSValue) -> Void =  (val : JSValue) -> Void in
        NSLog("Got callback")
    
    context.setObject(unsafeBitCast(callbackHandler, AnyObject.self), forKeyedSubscript: "callApp")
    context.evaluateScript("document.getElementById('content').addEventListener('input', callApp, false);")

这段代码的作用如下:

UIWebView 和 Swift 之间建立连接 将 Swift 处理程序添加到 JavaScript 函数 callApp 更新您的可编辑 div 以在输入更改时调用 JavaScript 函数 callApp

当它被连接时,你在UIWebView 中输入的每一次按键都会在 Swift 中触发callbackHandler。然后,您可以根据需要使用它来调整 UIWebView 的大小。

【讨论】:

以上是关于键入时如何更改 UIWebview 高度?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIWebView+AFNetworking 时链接如下

如何使用 UIWebView 获取滚动文本?

UiWebView 全屏显示

滚动到 UIWebView 上的文本 [关闭]

Swift:动态更改 TableViewCell 高度和动态更改 WebView 高度

UIWebView 打开新tab