在 UITableViewCell 中加载 UIWebView 并根据 UIWebview 的内容制作 UITabViewCell 的高度
Posted
技术标签:
【中文标题】在 UITableViewCell 中加载 UIWebView 并根据 UIWebview 的内容制作 UITabViewCell 的高度【英文标题】:Load UIWebView in UITableViewCell and Make UITabViewCell's height as per the content of UIWebview 【发布时间】:2015-03-03 10:45:29 【问题描述】:我正在开发一个项目,其中有一个包含 UIImageView、UILable 和 UIWebView 的 UITableViewCell。 我需要在 didselectrowatIndexpath 方法上打开一个 webview(其中添加了 html 字符串),并且单元格高度应该增加到 UIWebView 的内容大小。我试过以下代码。但这并没有按预期工作。请多多指教。
#pragma mark - Table view data source
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [faqContentArray count];
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
FAQCell *cell = (FAQCell*)[tableView cellForRowAtIndexPath:indexPath];
[cell.faqContentWebView loadHTMLString:[[faqContentArray objectAtIndex:indexPath.row] objectForKey:@"content"] baseURL:nil];
NSString *wrappedText = [[faqContentArray objectAtIndex:indexPath.row] objectForKey:@"content"];
cell.faqContentWebView.frame=CGRectMake(8.0f, 43.0f, 304.0f, [self minHeightForText:wrappedText]);
[self rotateIconToExpanded:cell.faqImage];
[self.faqTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];
//-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
// FAQCell *cell = (FAQCell*)[tableView cellForRowAtIndexPath:indexPath];
//
// [cell.faqContentWebView loadHTMLString:@"" baseURL:nil];
// cell.faqContentWebView.frame=CGRectMake(8.0f, 43.0f, 304.0f, 5);
// [self rotateIconToCollapsed:cell.faqImage];
// [self.faqTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
//
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
FAQCell *cell = (FAQCell*)[tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if (!cell)
[tableView registerNib:[UINib nibWithNibName:@"FAQCell" bundle:nil] forCellReuseIdentifier:@"MyCell"];
cell = (FAQCell*)[tableView dequeueReusableCellWithIdentifier:@"MyCell"];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.faqContentWebView.delegate=self;
cell.faqContentWebView.layer.cornerRadius = 0;
cell.faqContentWebView.userInteractionEnabled = NO;
cell.faqContentWebView.multipleTouchEnabled = YES;
cell.faqContentWebView.clipsToBounds = YES;
cell.faqContentWebView.scalesPageToFit = NO;
cell.faqContentWebView.scrollView.scrollEnabled = NO;
cell.faqContentWebView.scrollView.bounces = NO;
cell.faqContentWebView.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
cell.faqTitleLbl.text=[[faqContentArray objectAtIndex:indexPath.row] objectForKey:@"title"];
cell.faqImage.image=[UIImage imageNamed:@"downarow.png"];
return cell;
- (void)rotateIconToExpanded:(UIImageView *)iconImage
[UIView beginAnimations:@"rotateDisclosure" context:nil];
[UIView setAnimationDuration:0.2];
iconImage.transform = CGAffineTransformMakeRotation(M_PI * 2.5);
[UIView commitAnimations];
- (void)rotateIconToCollapsed:(UIImageView *)iconImage
[UIView beginAnimations:@"rotateDisclosure" context:nil];
[UIView setAnimationDuration:0.2];
iconImage.transform = CGAffineTransformMakeRotation(M_PI * 2);
[UIView commitAnimations];
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
id celll = [self tableView:tableView cellForRowAtIndexPath:indexPath];
FAQCell *cell=(FAQCell *)celll;
[cell setNeedsLayout];
[cell layoutIfNeeded];
NSLog(@"height------>%f",[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height);
return [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
【问题讨论】:
【参考方案1】:您需要计算(并可能监控)UIWebView
中内容的大小。一种方法是通过UIWebView
的UIScrollView
:
CGFloat webViewContentHeight = myWebView.scrollView.contentSize.height;
另一个是:
CGFloat webViewContentHeight = [myWebView stringForEvaluatingjavascript:@"document.body.offsetHeight"].floatValue;
当您检索到该高度很重要时,您将在 UIWebView
的内容完成加载后需要它(例如,一旦它具有您可以使您的 UITableViewCell
的约束无效/更新)。
【讨论】:
以上是关于在 UITableViewCell 中加载 UIWebView 并根据 UIWebview 的内容制作 UITabViewCell 的高度的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 如何知道从数组或字典中加载啥 JSON
Swift 4:无法在包中加载 NIB:自定义 UITableViewCell 的“NSBundle”(无 IB)