【问题标题】:set dynamic UIWebView as header in TableView在 TableView 中将动态 UIWebView 设置为标题
【发布时间】:2012-07-03 22:11:26
【问题描述】:

我将 UIwebview 设置为 UITableview.UIWebview 中的标题,高度和宽度是动态的。它用于本地 html 文件。

UIWebviewUITableview 在一个卷轴下。

它适用于 iphone。我为 ipad 编写的相同方法效果很好。但存在一个问题。 在 ipad 中的页眉视图和表格视图对齐不正确。

这是代码。

Rootviewcotrollor 是UITableviewControllor

Rootviewcontroller.m

 - (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Webview in UITableView";
webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; // Don't use CGRectZero here, won't work
webview.delegate = self;
webview.hidden = YES;

[webview loadRequest:[[NSURLRequest alloc] 
                      initWithURL: [NSURL URLWithString:@"http://www.google.com/"]]];

[self.tableView setTableHeaderView:webview]; // Leave this, else you'll have rows to fill the rest of the screen

}

- (void) webViewDidFinishLoad:(UIWebView *)webView {
float newSize = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue];
NSLog(@"Resizing webview from %.2f to %.2f", webView.frame.size.height, newSize);
webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, newSize);
webView.hidden = NO;

// We need to reset this, else the new frame is not used.
[self.tableView setTableHeaderView:webview];

}

对于相同的代码 iphone 输出

而 iPad 输出 UITableviewUIWebview. 之前启动滑块

我尝试设置标题框架但它不起作用,它使 webview 和 table view 都有自己的不需要的滚动视图。

有什么解决办法?

谢谢。

【问题讨论】:

  • 从后面的位置开始 webview,比如 CGRectMake(30,0,your.width,your.height)
  • 我试过了,但是整个框架都被打乱了,而且都有自己的滚动条。
  • 尝试使用一个简单的 UITableView,如果你想在它们周围有一个轮廓,你可以使用 cell.layer.borderwidth=1.0f;但首先要导入 QuartzCore 框架。

标签: iphone objective-c ipad uitableview uiwebview


【解决方案1】:

它是一个分组表视图,这就是为什么它的对齐方式不正确,因为分组表视图总是从 x-origin 和 y-origin 获取一些默认大小...您可以使用普通表或设置分组表的 x 或增加 x-网页视图的来源..

【讨论】:

  • 如何设置分组表的 x 和 y 原点?你看,对于 iphone 没问题,但在 ipad 中它不正确对齐。
  • 它也扰乱了框架,并且都有自己的卷轴。我需要两个卷轴。
  • 停止 webview 的滚动...禁用 web-view 滚动
  • 它工作正常。我只是禁用了 web 视图的滚动并再次设置表头框架和表视图框架。谢谢。
【解决方案2】:

您是否在“webviewdidfinishedload”委托中尝试过此操作 请注意,“MyWebView" 是触发委托的 webview,“webViewHeight”是 int 值,在它之后您应该添加自定义控件并将其声明为 public,这是我的工作代码中的快照。在 webview 之后添加 uitableview添加 cmets。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGSize size = [MyWebView sizeThatFits: CGSizeMake(1.0f, 1.0f)]; // Pass any size here
    CGRect frame = MyWebView.frame;
    frame.size.height = size.height;
    MyWebView.frame = frame;
    webViewHeight = size.height + 200;
}

【讨论】:

  • 您可以记录 frame.size.height 并获取值...只需要准确了解问题所在即可知道如何解决它..
猜你喜欢
  • 2016-08-05
  • 2015-10-18
  • 2012-01-30
  • 2014-06-04
  • 2012-02-09
  • 2014-02-19
  • 2016-10-19
  • 2014-08-16
  • 2015-07-05
相关资源
最近更新 更多