2012-11-27 52 views
0

我有一個包含WebKit WebView的單列列的NSTableView。我遇到的問題是如何獲得WebView的大小,以便我可以在表視圖的heightOfRow:方法中設置高度。如何獲得包含WebView的單元格的NSTableView heightOfRow

這裏是代碼的相關部分:

// The only essential/required tableview dataSource method 
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [self.messagesArray count]; 
} 

// This method is optional if you use bindings to provide the data 
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 

    NSString *identifier = [tableColumn identifier]; 
    if ([identifier isEqualToString:@"MainCell"]) { 

     ChatTableViewCell *cellView = (ChatTableViewCell*)[tableView makeViewWithIdentifier:@"MainCell" owner:self]; 
     NSString *htmlString = [self.messagesArray objectAtIndex:row]; 
     [[cellView.webView mainFrame] loadHTMLString:htmlString baseURL:nil]; 
     [cellView.webView.mainFrame.frameView setAllowsScrolling:NO]; 

     return cellView; 
    } 

    return nil; 
} 

我的問題是如何讓大小此方法。我到目前爲止所嘗試過的一切都給了我一個例外。我認爲這是因爲在調用以下方法時單元格未正確初始化,並且WebView方法loadHTMLString是異步的。

-(CGFloat) tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row { 
    //What can I put here? 
} 

我希望能夠將單元格大小調整爲與WebView中的內容大小相同。

編輯:我嘗試添加下列到heightOfRow方法:

WebView *webView = [((ChatTableViewCell*)[tableView viewAtColumn:0 row:row makeIfNecessary:YES]) webView]; 
    NSRect webViewRect = [webView frame]; 
    return webViewRect.size.height; 

,它給我下面的:

WARNING: NSTableView detected a rowView was requested from inside of the -heightOfRow delegate method. That is not supported!

回答

1

試試這個,它會給你的web視圖的高度內容..

使用html字符串像這樣加載webview ..

embedHTML = [embedHTML stringByAppendingFormat:@"<body><div id='size_div'>%@</div></body></html>",YourString]; 

現在在webViewDidFinishLoad方法保留此聲明...

NSString *output = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"size_div\").offsetHeight;"]; 
NSLog(@"height: %@", output); 
+0

如何再更改的tableview單元格的大小? – danielbeard

+0

這個答案讓我走上正軌,謝謝。 – danielbeard

相關問題