我正在使用UIWebView作为UITableViewCell的内容。当我添加UITableView时,我正在为UITableViewCell使用一些常量高度。因为UIWebView中没有加载任何内容。当在UIWebView中添加实际内容时,我可以使用[UIWebView sizeThatFits:CGSizeZero]获取UIWebView.by的实际高度;
现在的问题是UIWebView具有适当的高度,但是单元格的高度小于UIWebView的新高度。我如何更新该单元格的高度?
答案 0 :(得分:4)
在UIWebView加载完毕后,您应该调用
[tableView beginUpdates];
[tableView endUpdates];
这将再次调用-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
来调整UITableViewCell的大小。在该方法中,您可以根据UIWebView的大小计算单元格的新高度。
答案 1 :(得分:2)
将此方法放入您的代码中它将起作用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [[arrLocation objectAtIndex:indexPath.row] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
return labelSize.height + 5;
}
答案 2 :(得分:0)
在此方法中,您可以动态更改行高
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
答案 3 :(得分:0)
您可以参考此示例寻求帮助:
http://github.com/penso/webview-in-tableview
试试这段代码:
- (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 setTableFooterView: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 setTableFooterView:webview];
}