heightForRowAtIndexPath перед webViewDidFinishLoad - PullRequest
3 голосов
/ 10 мая 2011

Мне нужно загрузить HTML в ячейку табличного представления. Я использую UIWebView вместо UILabel, чтобы теги html интерпретировались. Размер WebView отличается, поэтому я делаю

- (void)webViewDidFinishLoad:(UIWebView *)webView {
   [webView sizeToFit];
}

Чтобы размер веб-просмотра был правильно установлен. Однако мне также нужно определить высоту ячейки, которую я планировал установить внутри

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
}

К сожалению, heightForRowAtIndexPath вызывается перед webViewDidFinishLoad, поэтому я не могу правильно определить высоту ячейки.

Есть предложения по моей проблеме? Я нашел старый вопрос по этому поводу, но он мне не помог: Как определить высоту UIWebView на основе содержимого в переменной высоте UITableView?

Спасибо

Adriana

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Я нашел решение своей проблемы.Мне нужно веб-просмотр в конце таблицы, поэтому я сделал следующее:

- (void)viewWillAppear:(BOOL)animated {

    CGRect frame = CGRectMake(10, 0, 280, 400);
    webView = [[UIWebView alloc] initWithFrame:frame];
    self.webView.delegate = self;
    webView.hidden = YES;

    //It removes the extra lines from the tableview.
    [self.tableView setTableFooterView:self.webView];
    ...
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [webView sizeToFit];
    [webView setBounds:CGRectMake(webView.bounds.origin.x, webView.bounds.origin.y, webView.bounds.size.width+20, webView.bounds.size.height)];
    self.webView.hidden = NO;
    [self.tableView setTableFooterView:webView];
    ...
    [webView release];
}

Это работает, и это быстро!

0 голосов
/ 10 мая 2011

Вы должны сохранить высоту строки после завершения загрузки веб-представления, затем обновите таблицу:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [webView sizeToFit];
    self.rowHeight = webView.bounds.size.height;
    [tableView reloadData];
}

И вы обновите метод tableView:heightForRowAtIndexPath: следующим образом:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return self.rowHeight ? self.rowHeight : 50;
}

Вы должны определить атрибут CGFloat rowHeight для своего класса.

0 голосов
/ 10 мая 2011

Когда у вашего веб-просмотра законченная загрузка, скажите вашему табличному представлению перезагрузить его данные - это снова запросит высоту ячеек:)

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [webView sizeToFit];
    [tableView reloadData];
}

При первой загрузке представления таблицы используйте высоту по умолчанию для представления в Интернете и покажите сообщение загрузки / пожалуйста, подождите?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (webViewIsLoaded) {
        return [webView bounds[.size.height;
    } else {
        return 50;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...