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的高度的主要内容,如果未能解决你的问题,请参考以下文章