Я загружаю строку HTML произвольной длины в UIWebView
который затем отображается в UITableViewCell
. Я не хочу, чтобы этот UIWebView
прокручивался независимо от UITableView
поэтому я должен изменить его высоту, чтобы соответствовать содержимому.
Этот UITableViewCell
также можно сбрасывать, не отображая UIWebView
когда он находится в состоянии свертывания.
Руд, как я знаю, что эта высота, чтобы я мог иметь heightForRowAtIndexPath
вернуть правильное значение и позволить таблице выглядеть и прокручивать правильно?
Вот пример кода:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0)
return 286;
if (indexPath.row == 1) {
if (analysisExpanded)
return analysisWebViewHeight + 39;
else
return 52;
}
if (sourcesExpanded)
return sourcesWebViewHeight + 39;
return 53;
}
Довольно просто. 39 - это высота некоторых заголовков, которые у меня есть в ячейке с веб-просмотром.
Я загружаю "расширенный вид" ячейки из наконечника, поэтому, чтобы получить веб-представление, я вызываю viewForTag:
UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1];
[sourcesWebView setBackgroundColor:[UIColor clearColor]];
[sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]];
sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue];
[sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)];
sourcesWebViewHeight
- это iVar, который обновляется приведенным выше кодом в cellForRowAtIndexPath
. Если пользователь три раза удаляет ячейку, разворачивает-сворачивает-разворачивает и делает небольшую прокрутку, в конечном итоге получает правильную высоту.
Я попытался "предварительно загрузить" высоту, используя объект UIWebView
только для памяти, но по какой-то причине он никогда не возвращал правильные номера.