ios键盘不占webview的高度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios键盘不占webview的高度相关的知识,希望对你有一定的参考价值。

ios中,可以通过设置webview的高度来调整键盘的高度,以便不占用webview的高度。可以使用以下代码来设置webview的高度:

let webViewHeight = UIScreen.main.bounds.height - keyboardHeight
webView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: webViewHeight)

这样就可以让键盘不占用webview的高度,从而达到最佳的效果。
参考技术A 设置viewport的user-scalable=no,就可以使输入框获取焦点的时候,不会放大整个页面,从而避免键盘弹出时页面高度发生变化,导致网页布局错乱的问题。

根据子WebView iOS增加单元格高度

【中文标题】根据子WebView iOS增加单元格高度【英文标题】:Increase cell height according to child WebView iOS 【发布时间】:2016-01-20 11:02:19 【问题描述】:

我在 UITableViewCell 中有一个 UIWebView,它加载一个 HTML 字符串。我已经根据其中的数据制作了这个 UIWebview 以获取完整的高度。现在我还想将 Cell 高度增加到 webview 的高度。

我尝试过类似的方法:-

 public override void LoadingFinished(UIWebView webView)
            
                if (!webView.IsLoading)
                

                    var contentSize = ContentWebView.ScrollView.ContentSize;
                    contentSize.Height = UIScreen.MainScreen.Bounds.Height;
                    ContentWebView.ScrollView.ContentSize = contentSize;

                    CGRect newFrame = TableHeader.Frame;
                    newFrame.Height = newFrame.Size.Height + contentSize.Height;

                    CellContentView.Frame = newFrame;


                
            

我该怎么做?

【问题讨论】:

你得到正确的 contentSize 值吗?不要重新加载 tableView 以使单元格的高度保持不变,是吗?我想您可以参考 webView 的自动布局约束高度并进行动态更改。 您知道要在网页视图中显示的内容吗? 我想在 UITableViewCell 中有一个 UIWebView 是个坏主意,因为它会被重复使用,并且每次在滚动过程中都必须再次加载 webView 内容 @BharathVankireddy 我从服务中获取要加载到 web 视图中的内容。它是一个字符串。 @Injectios 我基本上希望整个视图可以滚动,因为我在同一页面上有 2 个标签、1 个 web 视图、1 个列表、1 个文本字段和一个按钮。所以我在表头中显示 2 个标签,在一个单元格中显示 webview,在另一个单元格中显示列表,在页脚视图中显示文本字段和按钮。我可以通过任何其他方法使用 webview 和显示其所有内容的列表来实现这种完全滚动的行为吗? 【参考方案1】:

默认情况下,您必须返回一些默认高度。加载 Web 视图后,仅重新加载该特定单元格(使用 tableview reloadRowsAtIndexPaths 方法)。网页视图的内容高度可以使用代码计算:

[[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue]

在 web 视图的 webViewDidFinishLoad 委托方法中调用上述代码。

您的 tableview 委托方法将类似于:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 

    if //while Web view is loading
    return //default Height
    else
    return //calculated Height in webViewDidFinishLoad method.

【讨论】:

reload cell 会重新加载 webView 内容吗?不会导致循环吗? 我能够使 Webview 占据全高,但单元格大小不会增加【参考方案2】:

一旦你有了在 web 视图中渲染的字符串,调用下面的方法来使用下面的方法获取该字符串渲染所需的高度,

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font 
CGSize size = CGSizeZero;
if (text) 
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@ NSFontAttributeName:font  context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height+20.0f);

return size;

更新heightForRowAtIndexpath方法为,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

return [self getHeightForText:[self.valuesArray objectAtIndex:indexPath.row] havingWidth:323.0f andFont:[UIFont fontWithName:@"Helvetica" size:18.0f]].height;

在上述方法中,您还可以通过编写一些 if 条件来检查 Web 视图内容字符串的可用性。如果内容尚不可用,则返回该单元格的 44.0f 标准高度。

一旦网页视图的内容可用,通过传递单元格的索引路径调用tableview的以下方法。

    [self.tableView reloadRowsAtIndexPaths:@[iPath] withRowAnimation:UITableViewRowAnimationNone];

【讨论】:

以上是关于ios键盘不占webview的高度的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中 webview的键盘问题解决

iOS获取webview高度

iOS野路子精准获取webView内容高度,自适应高度

ios Flutter应用程序的webview中的键盘不显示

webview中的iOS键盘样式?

ios开发之--仿(微信)自定义表情键盘