2012-03-06 16 views
5

Quindi ho un UIWebView che visualizza contenuto html statico.UIWebView - Non ridimensiona il contenuto durante il cambio di rotazione?

Quando avvio lo ViewController in verticale e passa a orizzontale, ridimensiona il contenuto correttamente.

Tuttavia, quando si avvia la pagina in orizzontale e si passa alla verticale, non viene ridimensionato il contenuto e lo scorrimento è necessario per visualizzare tutto il contenuto.

È un bug? C'è una soluzione per forzare il ridimensionamento del contenuto di un UIWebView?

+0

Vedere http: // stackoverflow.it/questions/6007904/uiwebview-donest-ridimensiona-correttamente-quando-orientamento-modifica – buley

risposta

8

Hai 2 opzioni:
Aggiungi questo in HEAD sezione del file HTML:

<meta name="viewport" content="width=device-width" /> 

o chiamare il [myWebView reload] quando l'orientamento cambia

+0

Ho già provato la prima opzione, e lascia ancora circa 5 pixel di scorrimento che non mi piacciono. Proverò la seconda soluzione domani, se ciò non dovesse far battere il webView durante il ricaricamento, sarebbe una soluzione accettabile. Grazie – aryaxt

3

Ho avuto un problema simile. Ho risolto eseguendo codice javascript per generare un evento che aggiorna l'orientamento della pagina quando la rotazione UIViewController finito:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [webView stringByEvaluatingJavaScriptFromString:@"var e = document.createEvent('Events'); " 
                @"e.initEvent('orientationchange', true, false);" 
                @"document.dispatchEvent(e); "]; 
} 
+0

Non ha funzionato per me – aryaxt

+0

Neppure per me. – Tarun

1

Questa domanda è vecchia, ma questo dovrebbe risolverlo:

myWebView.scalesPageToFit = YES;

In alternativa, se si utilizza il Generatore di interfacce, è possibile selezionare la casella di controllo sotto Impostazioni Ispezione che dice "Pagina di vendita adatta".

Spero che aiuti.

+0

Grazie signore! Non sapevo che la soluzione era semplice. –

+2

non ha funzionato per me! –

0

Ho finito per usare il secondo approccio di @Sergey Kuryanov dal momento che il primo non ha funzionato per me. Stavo usando il metodo loadHTMLString di UIWebView, quindi lo vedrai nel codice ma puoi sostituirlo con qualsiasi metodo tu stia utilizzando per caricare i dati in UIWebView.

La prima cosa da fare era iscriversi alle notifiche di rotazione. Per farlo ho seguito la risposta di @ clearwater82 sull'argomento in questa domanda: How to detect rotation for a programatically generated UIView
Ho riscritto la sua risposta per Swift 3, lo puoi trovare nella stessa pagina.

Una volta eseguito, è stato facile ricaricare i dati in UIWebView utilizzando loadHTMLString. Il mio approccio era quello di avvolgere UIWebView all'interno di una vista personalizzata in modo da poter gestire anche alcune formattazioni dell'HTML direttamente nella mia vista personalizzata. Ciò ha reso molto semplice aggiungere la funzione "ricarica-su-rotazione". Ecco il codice che ho usato, maggiori dettagli nella risposta collegato:

// Handle rotation 
UIDevice.current.beginGeneratingDeviceOrientationNotifications() 
NotificationCenter.default.addObserver(
    self, 
    selector: #selector(self.orientationChanged(notification:)), 
    name: NSNotification.Name.UIDeviceOrientationDidChange, 
    object: nil 
) 

// Called when device orientation changes 
func orientationChanged(notification: Notification) { 
    // handle rotation here 
    self.webView.loadHTMLString(self.htmlText, baseURL: nil) 
} 

deinit { 
    NotificationCenter.default.removeObserver(self) 
    UIDevice.current.endGeneratingDeviceOrientationNotifications() 
} 

Voglio solo far notare due cose:

  • self.htmlText è una variabile che tiene il testo HTML voglio caricare che ho aggiunto alla mia vista personalizzata
  • l'uso di UIDevice.current.endGeneratingDeviceOrientationNotifications() era appropriato per la mia situazione, potrebbe non essere per il vostro

Questo è tutto, acclamazioni

Problemi correlati