在TableView中将动态UIWebView设置为标头

时间:2012-07-03 13:06:50

标签: iphone objective-c ipad uitableview uiwebview

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

UIWebviewUITableview在一个卷轴下。

它适用于iphone.Same方法我为ipad写的它很好用。但是有一个问题。 在ipad Header视图和表视图中对齐是不正确的。

这是代码。

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输出

enter image description here

iPad输出UITableviewUIWebview.

之前启动滑块

enter image description here

我尝试设置标题框但是它不起作用,它给webview和表视图都有它自己的不需要的scrollview。

它的解决方案是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

它的分组表视图就是为什么它的对齐不正确导致分组表视图从x-origin和y-origin始终采用一些默认大小...你可以使用普通表或设置分组表的x或增加x-网络视图的起源..

答案 1 :(得分:0)

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

- (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;
}