2013-01-01 19 views
8

Devo aggiungere UIWebView e alcuni pulsanti ed etichette all'interno di UIScrollView. Ho visto molte domande su come aggiungere UIWebView all'interno di UIScrollView ma sfortunatamente non sono stati in grado di aiutarmi a completare il mio compito. Quindi gentilmente non contrassegnarlo come duplicato o qualcosa del genere.UIWebView Inside UIScrollView Dimensioni del contenuto

Teoricamente, il problema può essere risolto seguenti fasi:

1) Fai UIWebView una visualizzazione secondaria di UIScrollView.

2) Chiama setScrollEnabled:NO per UIWebView per disabilitare lo scorrimento nativo.

3) Impostare la dimensione del contenuto di UIScrollView e UIWebView in base alla dimensione della stringa HTML caricata all'interno di UIWebview.

Sto utilizzando iOS 6 e StoryBoards. Ho aggiunto UIWebView come subview di UIScrollView.

Poi nel mio webViewDidFinishLoad, ho usato il seguente:

NSString *webHeight = [webView stringByEvaluatingJavaScriptFromString:@"document.height;"]; 
NSLog(@"WebView Height %@", webHeight); 

Questo mi dà l'altezza della WebView.

Su StackOverFlow, ho trovato quanto segue.

CGRect frame = webView.frame; 
    frame.size.height = 1; 
    webView.frame = frame; 
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; 
    frame.size = fittingSize; 
    webView.frame = frame; 

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height); 

Poi ho impostato la dimensione del UISCrollView alle dimensioni UIWebView:

mainScrollView.contentSize = webView.bounds.size; 

posso scorrere verso il basso fino in fondo, ma c'è uno spazio bianco in basso e UIWebView non sta facendo il suo dimensione in base alla dimensione del contenuto HTML caricato.

enter image description here

Sembra UIScrollView ha cambiato dimensione alla dimensione del contenuto di UIWebView ma UIWebView non mostra tutto. Come posso risolvere questo problema?

Gentilmente non mi consiglio la documentazione Apple che dice che non si dovrebbe usare UIWebView all'interno di UIScrollView. Lo so già, ma voglio usarlo come richiesto dal mio progetto.

risposta

2

Penso di poter fare un po 'di luce qui. Penso che tu stia confondendo la dimensione della cornice e la dimensione del contenuto. Per prima cosa descriverò la metodologia, quindi fornirò suggerimenti concreti.

Metodologia

Hai un WebView e correttamente disattivata lo scorrimento su di esso e impostare la contentSize alla dimensione completa del contenuto web. Si dovrebbe anche impostare la dimensione del frame sulla dimensione totale del contenuto web. Quindi aggiungiSoggorta questo a scrollView all'origine (0,0). Imposta il contenuto scrollViewSize per le dimensioni complete del contenuto web. Impostare la struttura scrollView sui limiti di viewController.view.

suggerimenti concreti

  • Il codice "fittingSize" che hai postato non guardare a destra per me. Lo scopo di questo codice è quello di impostare il frame della webView. Utilizzare NSLog o punti di interruzione per scoprire se si sta impostando l'intera dimensione del contenuto web.
  • Nota che lo scopo del codice javascript che hai postato è lo stesso del codice "fittingSize" che hai postato. Controlla per vedere quale produce l'output corretto.
  • Cerca di capire le dimensioni dei frame di webView e scrollView per aiutarti a eseguire il debug. Il modo migliore per farlo è impostare diversi colori di sfondo come questo: setBackgroundColor:[UIColor redColor]
  • La mia ipotesi migliore è che il webView.frame.size non sia impostato abbastanza grande.
2

Ho trovato la stessa situazione in cui webView non riflette la modifica della dimensione del fotogramma, rimane uno spazio vuoto mentre scorre verso il basso come menzionato da Jessica. Ho controllato il mio progetto e ho scoperto che ho abilitato la funzione autoLayout, quindi le soluzioni che ho trovato sono:

  1. disabilitare autoLayout.
  2. metti altezza vincolo WebView, dopo aver cambiato dimensione del frame WebView, utilizzando il codice follow come:

    self.webViewHeightConstraint.constant = fittingSize.height; [webView updateConstraints];

+1

Ho lo stesso problema di Jessica e utilizzo AutoLayout. Mi aiuti con i cambiamenti di altezza dell'altezza. Aiuta a risolvere questo problema. Non è necessario disabilitare AutoLayout. –

0

per ottenere l'altezza di contenuto di un UIWebView, consiglio vivamente la risposta da 'Fenomeni' qui: (. Non è la risposta accettata, quella qui sotto) http://stackoverflow.com Lui/lei suggerisce di non usare ' CGSizeZero ', e offre una soluzione migliore.

Problemi correlati