0

WebKit WebView を含む行を含む単一の列を持つ NSTableView があります。私が抱えている問題は、テーブルビューのheightOfRow:メソッドで高さを設定できるように、WebView のサイズを取得する方法です。

コードの関連部分は次のとおりです。

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

私が抱えている問題は、このメソッドでサイズを取得する方法です。これまでに試したことはすべて例外です。loadHTMLString以下のメソッドを呼び出したときにセルが正しく初期化されていないことと、WebView メソッドが非同期になっていることが原因だと思います。

-(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!

4

1 に答える 1

1

これを試してみると、webviewコンテンツの高さが得られます..

このような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);
于 2012-11-27T05:43:25.123 に答える