3

現在、カスタマイズされた uitableview セルに webview をロードしています。問題は、Web ビューのサイズが可変であることです。webViewDidFinishLoad では、html ドキュメントの実際のサイズに基づいて Web ビューのサイズを設定できます。私の問題は、Web ビューの読み込みが完了する前に、すでに heightForRowAtIndexPath で高さが設定されているテーブル セルです。テーブル セルがロードされた後、テーブル セルの高さを変更するにはどうすればよいですか?

理想的には、このようなコード行を使用できるようになるべきだと思います。

cellW.frame = cellW.cellWebView.frame;

ただし、heightForRowAtIndexPath のセル情報にアクセスできないようです。状況をかなりうまく説明したように感じましたが、投稿すべきだと思われるコードはすべてここに掲載できます。私は多くのことを試しました (そのため、どこでもコメントや失敗した試みがあります) が、主な問題は、heightForRowAtIndexPath などの適切な場所でセル情報にアクセスできないように見えることです。webViewDidFinishLoad で何らかの方法でセル情報を設定することさえできれば、Web ビューのフレーム サイズも設定しているセルのフレームを簡単に設定できます。

以下は、テーブル セル サブクラスのセットアップです。

#import <UIKit/UIKit.h>
#import "DefinitionsAndConstants.h"

@interface UITableViewCellWebView : UITableViewCell
{
    UIWebView *cellWebView;
}

@property (nonatomic,retain) UIWebView *cellWebView;
@end

これは、Gavinのコードの一部を使用しようとして最後に試みたものです。しかしもちろん、cellForRowAtIndexPath が割り当て可能でないため、テーブル セルを設定する方法はありません。

-(void)webViewDidFinishLoad:(UIWebView *)webViews {
    [webViews stringByEvaluatingJavaScriptFromString:@"twitterfy()"];
    [webViews stringByEvaluatingJavaScriptFromString:@"document.getElementById('tweettext').innerHTML=tweet"];
    NSString* h = [webViews stringByEvaluatingJavaScriptFromString:@"getDocHeightMax()"];
    int height = [h intValue];
    webViews.frame = CGRectMake(0.0f, 0.0f, 320.0f, height);

    NSString* i = [webViews stringByEvaluatingJavaScriptFromString:@"return indexPath"];
    int ii = [i intValue];
    NSIndexPath* ip = [NSIndexPath indexPathForRow:ii inSection:0];

    UITableViewCellWebView *tableCell = (UITableViewCellWebView *)[self.tableView cellForRowAtIndexPath:ip];

    if (tableCell) {
        tableCell.frame = webViews.frame;
    }

    NSLog(@"Got height from webview %d", height);
}
4

2 に答える 2

0

heightForRowAtIndexPath メソッドに対して次のようなことができるはずです。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *tableCell = (MyTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];

    if (tableCell) {
        return tableCell.cellWebView.frame.size.height;
    }

    return 44;
}

このように、表のセルが表示されている場合は、埋め込まれた Web ビューの高さに応じて高さが設定されます。それ以外の場合は、デフォルトの高さが使用されます。テーブル ビューでセルの高さを更新するには、Web ビューのサイズが適切に設定されたら、次を呼び出す必要があります。

[self.tableView beginUpdates];
[self.tableView endUpdates];

セルをリロードすることはできません。これにより、問題が発生する可能性があります。高さを再度チェックするだけで、セルの高さが新しい高さにアニメーション化されます。

于 2013-12-18T19:16:10.950 に答える