如何在键入时更改UIWebview高度?

时间:2013-10-24 11:10:26

标签: ios objective-c uiwebview

我正在使用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高度?

2 个答案:

答案 0 :(得分:0)

因为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

感谢。

答案 1 :(得分:0)

我知道这是前一段时间被问到的,但我正在研究这个问题,并且我发现了解决这个问题的方法。简而言之,处理此问题的最佳方法是通过以下方式使用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的大小。