相关疑难解决方法(0)

如何根据内容在可变高度UITableView内确定UIWebView高度?

我正在尝试创建一个UITableView可变高度行,如本问题的答案中所述

我的问题是每个单元格包含一个UIWebView具有不同(静态加载)的内容我无法弄清楚如何根据内容计算合适的高度.有没有办法做到这一点?我尝试过这样的事情:

   (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
       WebViewCell *cell = (WebViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
       [cell setNeedsLayout];
       [cell layoutIfNeeded];
       return cell.bounds.size.height;
    }
Run Code Online (Sandbox Code Playgroud)

细胞本身是从笔尖加载的,笔尖只是一个UITableViewCell含有a 的笔尖UIWebView.(如果细胞只是将自己调整到html内容的最大值,那也没关系,尽管可变高度会更好).

iphone cocoa-touch uiwebview uitableview ios

69
推荐指数
3
解决办法
7万
查看次数

调整UIWebView高度以适应内容

我正在加载一个任意长度的HTML字符串,UIWebView然后显示在一个UITableViewCell.我不希望它UIWebView独立滚动,UITableView所以我必须调整其高度以适应内容.

UITableViewCell也是可折叠的,没有显示UIWebView它处于折叠状态的时间.

问题是,我怎么知道这个高度是什么,以便我可以heightForRowAtIndexPath返回一个正确的值并允许表格正确查看和滚动?

这是一些示例代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0)
    return 286;

if (indexPath.row == 1) {
    if (analysisExpanded)
        return analysisWebViewHeight + 39;
    else 
        return 52;
}

if (sourcesExpanded)
    return sourcesWebViewHeight + 39;

return 53;
Run Code Online (Sandbox Code Playgroud)

}

很简单.39是我在webview的单元格中的一些标题内容的高度.

我正在从一个笔尖加载单元格的"扩展视图",所以要获得我正在调用viewForTag的webview:

        UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1];
        [sourcesWebView setBackgroundColor:[UIColor clearColor]];
        [sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]];
        sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue];
        [sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)];
Run Code Online (Sandbox Code Playgroud)

sourcesWebViewHeight是由上面的代码更新的iVar …

iphone objective-c

10
推荐指数
2
解决办法
8970
查看次数

使用Javascript获取webView内容的总高度

我使用UIWebView的是以HTML字符串的形式显示内容 - 不是网站,高于iPhone的屏幕,而不需要滚动webView本身,将其留给父滚动视图.

为了实现这一点,我需要一种方法来获取总文档大小,包括可滚动区域,以设置webView的高度.我尝试了许多不同的Javascript解决方案:

(document.height !== undefined) ? document.height : document.body.offsetHeight // Returns height of UIWebView
document.body.offsetHeight // Returns zero
document.body.clientHeight // Returns zero
document.documentElement.clientHeight // Returns height of UIWebView
window.innerHeight // Returns height of UIWebView -2
document.body.scrollHeight // Returns zero
Run Code Online (Sandbox Code Playgroud)

有没有真正有效的解决方案?

当前(非工作)代码:

[[[self.singlePost.contentText subviews] lastObject] setScrollEnabled:NO];
int content_height = [[self.singlePost.contentText stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue];
NSLog(@"Content_height: %d", content_height);
CGRect rect = self.singlePost.contentText.frame;
rect.size.height = content_height;
self.singlePost.contentText.frame = rect;
Run Code Online (Sandbox Code Playgroud)

javascript iphone objective-c uiwebview uiscrollview

9
推荐指数
4
解决办法
2万
查看次数

UIWebView内部UIScrollView内容大小

我必须在里面添加UIWebView一些按钮和标签UIScrollView.我已经看到很多关于如何添加UIWebView内部的问题UIScrollView但不幸的是他们无法帮助我完成我的任务.所以请不要将其标记为重复或其他内容.

从理论上讲,这个问题可以通过以下步骤解决:

1)制作UIWebView子视图UIScrollView.

2)调用setScrollEnabled:NOUIWebView禁用其本土滚动.

3)设置内容的大小UIScrollViewUIWebView内部加载的HTML字符串的大小UIWebview.

我正在使用iOS 6和StoryBoards.我添加了UIWebView作为子视图UIScrollView.

然后在我webViewDidFinishLoad,我使用了以下内容:

 NSString *webHeight = [webView stringByEvaluatingJavaScriptFromString:@"document.height;"];
 NSLog(@"WebView Height %@", webHeight);
Run Code Online (Sandbox Code Playgroud)

这给了我WebView的高度.

在StackOverFlow上,我遇到了以下内容.

    CGRect frame = webView.frame;
    frame.size.height = 1;
    webView.frame = frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
Run Code Online (Sandbox Code Playgroud)

然后我已将大小设置UISCrollView为大小UIWebView:

mainScrollView.contentSize = …
Run Code Online (Sandbox Code Playgroud)

iphone xcode uiwebview uiscrollview ios

8
推荐指数
1
解决办法
6101
查看次数

根据UIWebView的内容字体大小动态调整UIWebView的大小

我有一些文本需要在我的应用程序中显示.该文本包含需要交互的链接.我曾尝试制造可点击链接了几个解决方案UITextViewsUILabels.

  1. UITextView 链接

    • UITextView 提供数据检测器,可以获取URL并使其可以自适应.
    • 我无法使用因为链接只能在Safari外部打开,所以无法通过链接控制并执行我想要的操作.
  2. UILabel使用"Fancy Labels"的链接(http://furbo.org/2008/10/07/fancy-uilabels/)

    • 几乎是完美的解决方案,提供链接检测和用户内联方式查看和点击它们的方式,让我完全控制在按下链接时如何处理链接.
    • 目前无法使用,因为实现使用UIButtons来覆盖链接,并且它们不包含长链接上的文本.

最后我决定使用webview.我将文本传递给webview,并围绕它构建一个基本的HTML包装器,所有东西都是hunky-dory.这与Twitter for iPhone(又名Tweetie)使用的方法相同.

我现在唯一的问题是,如果文本太长,webview会剪切溢出并滚动以查看剪切的文本.其次,如果文本太短,那么webview下面就会有一大片浪费的空间.

与Tweetie不同,我在webview下面有更多内容,我想避免滚动溢出或浪费空间.无论如何,webview都是滚动视图的子视图,因此整个页面的内容可以增长,而不需要滚动子视图.

有没有什么方法可以动态调整webview的大小,以便根据它的内容来确定它的高度?

到目前为止,我尝试了很多东西,似乎没有什么是可靠的解决方案:

  • sizeToFit 什么都不做(或者更可能的是,只是将大小设置为当前帧的大小).
  • sizeThatFits: 无论如何返回当前大小.
  • NSStringsizeWithFont:constrainedToSize:原因是不可行的UIWebView,并UIFont有什么大小18是不同的表示.
    • 只是详细说明这一点.在我的测试,我发现,随着1.0的比例因子网页视图,并scalesPageToFit设置NO和设置为13.5pt整个页面的字体大小(CSS)呈现文本,其大小为同UILabel一个UIFont尺寸18.如果有人能解释我,我会感激不尽.
  • Also, in the webView I'm using the CSS property word-wrap: break-word; in order to prevent the webView from scrolling horizontally with long words or URLs. Because of this, the wrapping behaviour between the …

iphone font-size uiwebview uikit ios

7
推荐指数
1
解决办法
1万
查看次数

具有自动布局的UIWebView的动态高度

我有UIWebView动态设置高度的问题.webview加载包含html的产品说明.我希望UIWebView根据描述的内容改变它的高度.父滚动视图也应该改变它的高度,但是然后根据高度UIWebView.

任何人都可以向我解释如何实现我的观点所需的行为吗?

这是我的视图层次结构:

在此输入图像描述

iphone objective-c uiwebview ios

7
推荐指数
3
解决办法
1万
查看次数

在ios 7中加载到webview之前如何计算html字符串的高度?

我想找到来自webservice的html字符串的高度.请建议我最好的解决方案.

提前致谢

iphone ios ios7

7
推荐指数
1
解决办法
1587
查看次数

将UIWebView的大小调整为其内容

在UITextView中,我可以将控件的高度调整为其内容,如下所示:

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)

但我想使用UIWebView来显示富文本.UIWebVie的内容是:

NSString *myDescriptionHTML = [NSString stringWithFormat:@"<html> \n"
                                  "<head> \n"
                                  "<style type=\"text/css\"> \n"
                                  "body {font-family: \"%@\"; font-size: %@; }\n"
                                  "</style> \n"
                                  "</head> \n"
                                  "<body>%@</body> \n"
                                  "</html>", @"helvetica",
                                  [NSNumber numberWithInt:12], @"yadayadayada..."];
[webView loadHTMLString:myDescriptionHTML baseURL:nil];
Run Code Online (Sandbox Code Playgroud)

所以UIWebView只包含纯文本.如何实现类似于上述UITextView代码的结果?

javascript iphone objective-c uiwebview

6
推荐指数
1
解决办法
1万
查看次数

UIWebView不完全加载,高度变化

我有一个包含一些标签的视图控制器和一个在其中加载一些html的UIWebView.所有这些标签和UIWebView都是UIScrollView的子视图.我已禁用UIWebView的滚动,因此标签和UIWebView在UIScrollView中一起滚动.

然后我找到了UiWebView内部的内容大小,根据内容大小更改了UIWebView大小,然后将滚动视图的大小设置为webview的大小.这是我通过在webViewDidFinishLoad中添加以下代码来实现的:

CGRect frame = myWebView.frame;
frame.size.height = 1;
myWebView.frame = frame;
CGSize fittingSize = [myWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
myWebView.frame = frame;

NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);

mainScrollView.contentSize = myWebView.bounds.size; 
Run Code Online (Sandbox Code Playgroud)

当我使用NSLog来查看webview内容的大小时,我注意到它为相同的内容提供了不同的高度.例如,如果我第一次打开视图控制器,它会显示高度等于915.0,当我在导航中向后移动并返回到该视图控制器时,日志将显示大小为1012.0.

我相信这可能是由于html内容中的图片加载.任何人都可以告诉我如何修复它以便第一次显示正确的高度?谢谢!

更新:如果我使用javascript使用不同的策略,我已经尝试使用以下代码:

CGRect oldBounds = [[self myWebView] bounds];
CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
NSLog(@"NEW HEIGHT %f", height);
[myWebView setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)];
mainScrollView.contentSize = myWebView.bounds.size;
Run Code Online (Sandbox Code Playgroud)

这段代码每次在日志中给我正确的高度,这正是我想要的,但整个webview向上移动了一点,阻止了它上面的所有标签.我做错了什么以及如何解决它?谢谢!

objective-c uiwebview uiscrollview ios

6
推荐指数
1
解决办法
3925
查看次数

如何在iPhone sdk中获取UIWebView的内容高度,objective-c?

可能重复:
如何确定UIWebView的内容大小?

海吉斯,

我在将htmlString输入到UIWebView时遇到了问题,我在iphone中设置了webview的帧高度总是265.

    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 41, 320, 265)];
Run Code Online (Sandbox Code Playgroud)

是否有任何属性可以获取UIWebView的内容高度.

如果我只得到一两行内容,那么它在两行之下看起来很奇怪.我怎样才能让它变得动态.请建议任何解决方案.

谢谢,Madan Mohan.

iphone objective-c uiwebview

5
推荐指数
1
解决办法
1万
查看次数

iOS:在didFinishLoad之后调整UIWebView(内容应该适合而不滚动)

我绝对无法调整我的大小UIWebView.

UIWebView的声明是在.h和IB中连接的.IB中的高度是110.但是我的文本高度大约是1500.现在我想改变高度,这样全文就可以读取而不需要滚动.

什么代码调整了我UIWebView的内容webViewDidFinishLoad?找不到任何有效的东西.

height xcode uiwebview ios

5
推荐指数
1
解决办法
3万
查看次数

Autolayout混淆:使用WebView和页眉/页脚视图的ScrollView约束

为了说明我的问题,我创建了以下图形:

现在是3D

红色方块周围的黑色边框应该是iPhone屏幕.在里面,我们有红色a UIScrollView,比屏幕高.事实上,它与a一样高UIWebView,以黄色显示.这UIWebView是一个子视图UIScrollView,滚动禁用.此外,我们有两个蓝色视图,我喜欢称之为页眉和页脚视图.它们也是UIScrollView可滚动边界之外的子视图.

我现在的问题是:如何为此配置自动布局约束?

我已经成功地检索到的UIWebView使用高度代码这个答案,并随后更新UIScrollViewcontentSize相应.然而,这并不是一个很好的解决方案,因为UIWebView宽度不会对宽度变化做出反应UIScrollView.

我还设法设置了标题视图的布局约束(使用Masonary):

[headerView makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(@-100);
    make.left.equalTo(@0);
    make.width.equalTo(scrollView.width);
    make.height.equalTo(@100);
}];
Run Code Online (Sandbox Code Playgroud)

但是,像这样设置页脚视图的布局不起作用:

[changeView makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(scrollView.bottom)
    make.left.equalTo(@0);
    make.width.equalTo(scrollView.width);
    make.height.equalTo(@100);
}];
Run Code Online (Sandbox Code Playgroud)

我觉得这不会太困难,并会感谢一些熟悉汽车布局的人的帮助.谢谢!

iphone objective-c ios nslayoutconstraint

5
推荐指数
1
解决办法
1112
查看次数

获得样式化的UIWebView内容的大小 - 不太合适

这似乎是一个常见问题,但我找不到合适的解决方案.我正在尝试重新调整一堆UIWebView以适应他们的内容,但它似乎无法正常工作.到目前为止,我发现的最佳解决方案是这个答案,但它似乎只是偶尔在我的解决方案中工作.我们的想法是在webViewDidFinishLoad:委托方法中重新调整UIWebView的大小.但是,这仍然无法获得正确的尺寸.如果我在引发一些不确定的时间更新 webViewDidFinishLoad:,内容不会得到正确的大小.

我将在下面描述我的情况,我将在Gist上粘贴相关的来源.

问题描述

我有一种情况,我从JSON API获取数据并在webview中显示数据.API返回一个对象数组,每个对象都有一个带有HTML格式文本的"content"字段.设计师给出了一个结构,其中包含一个(大部分)隐藏视图,您可以向上滑动显示,其中包含所有内容的滚动视图,以非常特殊的方式格式化.

为了实现这一点,我有三个视图控制器:主视图控制器,在主视图控制器上向上滑动以显示的辅助视图控制器,以及从JSON API结果显示一个html格式内容项的三级视图控制器.
辅助视图控制器包含UIScrollView和一组第三视图控制器.每个第三视图控制器都包含一个UIWebView,用于显示HTML格式的内容,以及用于显示JSON对象的其他属性的标签.因为第三视图将显示在辅助视图中的UIScrollView内,所以需要重新调整第三视图的UIWebView以适合其内容并禁用用户交互以防止滚动视图中的滚动视图混乱场景.

使所有这些工作的过程如下:

  1. 首先,在主控制器ViewDidLoad上,加载并显示辅助视图和活动指示器,以便UI看起来不会冻结
  2. 接下来,从JSON API加载数据
  3. 当加载API的数据(通过委托通知)时,构造第三级视图控制器,从加载的数据中设置它们的属性并将它们添加到辅助控制器的列表中.
  4. 完成后,调用辅助控制器的设置方法.此方法循环遍历第三级控制器列表并依次调用其设置方法
  5. 每个三级控制器的设置方法设置标签的文本,并使用loadHTMLString:预定义的html文件的内容设置UIWebView 的内容,并替换JSON对象的内容.
  6. 在第三级控制器的webViewDidFinishLoad:委托方法上,使用此答案中的方法,根据内容大小重新调整Web视图的大小.
  7. 重新调整三级控制器视图的大小以适合Web视图并定位Web视图下方的任何标签
  8. 然后,三级控制器调用委托方法来通知辅助控制器它已完成加载.辅助控制器监视其三级控制器中的哪个已完成加载.
  9. 当所有三级控制器都完成加载时,辅助控制器循环遍历其列表并将第三视图添加到其UIScrollView的内容中,调整帧和内容高度.

uiwebview ios

0
推荐指数
1
解决办法
2769
查看次数