2016-01-20 5 views
0

У меня есть UIWebView внутри UITableViewCell, который загружает строку HTML. Я сделал это UIWebview для полной высоты в соответствии с данными в нем. Теперь я также хочу увеличить высоту ячейки до высоты webview.Увеличение высоты ячейки в соответствии с дочерним элементом WebView iOS

Я пытался что-то вроде этого: -

public override void LoadingFinished(UIWebView webView) 
      { 
       if (!webView.IsLoading) 
       { 

        var contentSize = ContentWebView.ScrollView.ContentSize; 
        contentSize.Height = UIScreen.MainScreen.Bounds.Height; 
        ContentWebView.ScrollView.ContentSize = contentSize; 

        CGRect newFrame = TableHeader.Frame; 
        newFrame.Height = newFrame.Size.Height + contentSize.Height; 

        CellContentView.Frame = newFrame; 


       } 
      } 

Как я могу это сделать?

+0

У вас есть правильное содержаниеВсе значение? Разве вы не перезагружаете tableView, поэтому высота ячейки остается такой же, не так ли? Я думаю, вы можете иметь ссылку на высоту ограничения автоопределения для webView и динамически изменять ее. – Injectios

+0

Знаете ли вы контент, который хотите показать в веб-представлении? –

+0

Я думаю, что это плохая идея иметь UIWebView внутри UITableViewCell, поскольку он повторно используется и каждый раз, когда вам приходится снова загружать содержимое webView во время прокрутки – Injectios

ответ

0

По умолчанию вам необходимо вернуть некоторую высоту по умолчанию. После загрузки веб-просмотра перезагрузите только эту конкретную ячейку (используя метод tableview reloadRowsAtIndexPaths). Высота содержимого веб-зрения может рассчитывается с использованием кода:

[[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue] 

вызова выше кода в webViewDidFinishLoad метод делегата от веб-просмотра.

Ваш метод TableView делегат будет выглядеть некоторые вещи, как:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if //while Web view is loading 
    return //default Height 
    else 
    return //calculated Height in webViewDidFinishLoad method. 
} 
+0

reload cell будет перезагружать контент webView правильно? Не приведет ли это к циклу? – Injectios

+0

Iam, способный сделать веб-просмотр полной высоты, но размер ячейки не увеличивается –

0

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

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { 
CGSize size = CGSizeZero; 
if (text) { 
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil]; 
    size = CGSizeMake(frame.size.width, frame.size.height+20.0f); 
} 
return size; 
} 

Обновление heightForRowAtIndexpath Способ,

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

return [self getHeightForText:[self.valuesArray objectAtIndex:indexPath.row] havingWidth:323.0f andFont:[UIFont fontWithName:@"Helvetica" size:18.0f]].height; 
} 

В вышеприведенном методе вы также можете проверить наличие строки содержимого веб-представления, написав какое-либо условие if. Если содержимое еще не доступно, вы возвращаете стандартную высоту 44.0f для этой ячейки.

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

[self.tableView reloadRowsAtIndexPaths:@[iPath] withRowAnimation:UITableViewRowAnimationNone]; 
Смежные вопросы