UIWebView mit angehängter UITableView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIWebView mit angehängter UITableView

    Hallo

    Ich suche nach einer Möglichkeit eine UIWebView zusammen mit einer UITableView darunter darzustellen, so dass die UIWebView zu sehen ist, und beim Scrollen dann die UITableView zum Vorschein kommt. So als wären beide zusammen in einer UIScrollView.
    Gibt es dazu eine "Standardlösung" ?
    Eine Idee wäre ja, eine UITableView zu benutzen, und die erste Zelle enthält ein UIWebView. Dazu muss ich dann allerdings die tatsächliche Höhe des Webviews ermitteln.
    Vielleicht eine ganz peinliche Idee. In der Webseite ein Tag integrieren, welches dann eine UIView aufruft. Gibt's diese Möglichkeit?

    Danke und Gruss
    Oliver
  • obb schrieb:

    Gibt es dazu eine "Standardlösung" ?

    Nein, die gibt es meines Wissens nicht. Den WebView in einer Tabellenzelle anzuzeigen, sollte aber möglich sein.

    obb schrieb:

    Eine Idee wäre ja, eine UITableView zu benutzen, und die erste Zelle enthält ein UIWebView. Dazu muss ich dann allerdings die tatsächliche Höhe des Webviews ermitteln.
    Vielleicht eine ganz peinliche Idee. In der Webseite ein Tag integrieren, welches dann eine UIView aufruft. Gibt's diese Möglichkeit?

    So ein ähnliches Thema hatten wir neulich: Höhe einer TableViewCell an content eines UIWebView anpassen Ganz wichtig dabei ist, dass Du die Größe des WebViews erst nach dem vollständigen Laden des Inhalts anpasst.
    „Meine Komplikation hatte eine Komplikation.“
  • Vielen Dank für deine Antwort.

    Ich löse es jetzt mit einer UITableView. Inspiriert durch blog.penso.info/2009/08/02/uiwebview-in-uitableview/
    Dort wird die Höhe der geladenen Webseite allerdings mit mit einer Javascript Abfrage gelöst.

    Quellcode

    1. [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"]

    Bei mir hat es aber auch ohne diesen Trick funktioniert, und ich benutze sizeThatFits.

    Die UIWebView wird aber nicht in die erste Zelle gehängt, sondern in den TableHeader!
    Bei der UITableView bei initWithNibName oder viewDidLoad

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. myWebView = [[UIWebView alloc] initWithFrame:CGRectNull];
    5. myWebView.delegate = self;
    6. [myWebView setAutoresizesSubviews:YES];
    7. [self.tableView setTableHeaderView:myWebView];
    8. }


    Startet der Ladevorgang setze ich das WebView auf eine kleine Höhe, damit bei einem zweiten Ladevorgang das WebView auch wieder kleiner gesetzt wird.

    Quellcode

    1. - (void)webViewDidStartLoad:(UIWebView *)webView
    2. {
    3. [self.myWebView setFrame:CGRectMake(0, 0, 320, 40)];
    4. }


    Ist dann die Webseite geladen, ermittle ich die Höhe, und passe danach die Höhe des UITableView Headers an.

    Quellcode

    1. - (void)webViewDidFinishLoad:(UIWebView *)webView
    2. {
    3. CGSize newSize=[webView sizeThatFits:CGSizeMake(320, 40)];
    4. float newHeight=newSize.height;
    5. webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, newHeight);
    6. [self.tableView setTableHeaderView:webView]; // Muss hier noch mal gesetzt werden!
    7. }


    Nun passt sich die Höhe des UIWebViews bei jedem Laden erneut an.

    Jetzt kann man natürlich auch noch die UITableView ausblenden bis die Webseite geladen ist, usw.
  • obb schrieb:

    Bei mir hat es aber auch ohne diesen Trick funktioniert, und ich benutze sizeThatFits.

    Das halte ich auch für die sauberere Lösung. Der Javascript-Aufruf liefert Dir die Höhe des HTML-Dokuments. Abgesehen davon, dass der WebView da noch den einen oder anderen Pixel in der Höhe dazutun kann, denke ich, dass dieser Wert auch eine eventuelle Skalierung des Inhalts unberücksichtigt lässt.
    „Meine Komplikation hatte eine Komplikation.“
  • Die Berechnung der Höhe funktioniert nur wirklich gut, wenn schon vor dem laden der Bilder, deren Höhe bekannt ist.

    Quellcode

    1. <img src="meinbild.jpg" style="width:300px;height:280px" alt="meinbild" />

    Sonnst muss man vermutlich warten, bis wirklich alle Bilder geladen wurden.