2013-08-30 20 views
1

根據UIWebView的大小,我在調整UItablecell時遇到問題。調整大小的UITableCell中的WebView單元問題

當我嘗試調整我CellheightForRowAtIndexPath方法,它不知道的WebView的大小,因爲它webViewDidFinishLoad之前運行。我使用webViewDidFinishLoad調整webView依賴內容的大小。

的cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; 
    static NSString *CellIdentifier = @"OtherCells"; 

    OtherCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[OtherCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSURL *baseURL = [NSURL fileURLWithPath:path]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    cell.WebView.delegate = self; 
    NSString *ImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", [NameArray objectAtIndex:indexPath.row] ]]; 
    [cell.WebView loadHTMLString:[NSString stringWithFormat:@"<head><body style=」background-color:transparent」><head><body id=\"foo\">\ 
            <div><img style=\"float:left;width:100px;height:50px;margin-right:10px;margin-bottom:5px;border:1px solid gray;padding:5px;\" src=\"file://%@/\"> <p id=\"test\" style=\"color:rgb(5, 85, 173);font-size:12px;font-family:\"Trebuchet MS\"\"><b>%@</b></p> <p id=\"test2\" style=\"position:relative;top:-7px;font-size:11px;font-family:\"Trebuchet MS\"\">%@ <br><span id=\"time\" style=\"float:right;font-size:10px;\">%@</span></p></div></body>",ImagePath,[TitleArray objectAtIndex:indexPath.row],[SummaryArray objectAtIndex:indexPath.row],[TimeStampArray objectAtIndex:indexPath.row]] baseURL:nil]; 
    return cell; 
} 

webViewDidFinishLoad

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    OtherCell *cell = (OtherCell *)[[webView superview] superview]; 
    NSString *string = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"test\").offsetHeight;"]; 
    NSString *string2 = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"test2\").offsetHeight;"]; 
    NSString *string3 = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"time\").offsetHeight;"]; 
    CGFloat height = [string floatValue] + [string2 floatValue] +[string3 floatValue]+ 14; 

    rowHeight=height; 
    CGRect frame = [webView frame]; 
    frame.size.height = height; 
    [webView setFrame:frame]; 

    NSLog(@"webViewDidFinishLoad"); 
    //test label after webview  
    CGRect frame1= [cell.Label frame]; 
    frame1.origin.y = height+2; 
    [cell.Label setFrame:frame1]; 
} 
+0

您應該避免在'UITableViewCell'中使用'UIWebView'。爲什麼你需要在單元格中查看網頁? – Amar

+0

在圖像中包裝內容內容http://s22.postimg.org/j7wbuk4bl/i_OS_Simulator_Screen_shot_Aug_30_2013_10_46_48.png – Cliff

+0

這可以在沒有Web視圖的情況下完成。看看[這個問題](http://stackoverflow.com/questions/5284516/how-can-i-draw-image-with-text-wrapping-on-ios)及其答案。還有包含解釋的回答者的博客鏈接。 – Amar

回答

1

計算所有字符串就其UILabel的字體名稱,大小和斷裂模尺寸。

CGSize maximumTitleLabelSize = CGSizeMake(280, 9999); 
CGSize expectedFirstStringSize = [string sizeWithFont:cell.Label.font constrainedToSize:maximumTitleLabelSize lineBreakMode:cell.Label.lineBreakMode]; 
CGSize expectedSecondStringSize = [string2 sizeWithFont:cell.Label.font constrainedToSize:maximumTitleLabelSize lineBreakMode:cell.Label.lineBreakMode]; 
CGSize expectedThirdStringSize = [string3 sizeWithFont:cell.Label.font constrainedToSize:maximumTitleLabelSize lineBreakMode:cell.Label.lineBreakMode]; 

然後創建你的字符串的總高度你的高度的新框架;

CGRect cellFrame = cell.frame; 
cellFrame.size.height = expectedFirstStringSize.height + expectedSecondStringSize.height + expectedThirdStringSize.height; 

最後把它分配給你的細胞;

cell.frame = cellFrame; 

希望這會有所幫助。

+0

其工作單元不在webviewdidfinish上調整大小 – Cliff