Terminé utilizando el segundo enfoque de @Sergey Kuryanov ya que el primero no funcionó para mí. Estaba usando el método loadHTMLString
de UIWebView, así que lo verá en el código, pero puede reemplazarlo con el método que esté utilizando para cargar datos en UIWebView.
Lo primero que debe hacer es suscribirse a las notificaciones de rotación. Para hacer eso seguí la respuesta de @ clearwater82 al respecto en esta pregunta: How to detect rotation for a programatically generated UIView
Reescribí su respuesta para Swift 3, puedes encontrarla en la misma página.
Una vez hecho esto, fue fácil volver a cargar los datos en UIWebView usando loadHTMLString
. Mi enfoque fue envolver el UIWebView dentro de una vista personalizada, así que también pude manejar algún formato del HTML directamente dentro de mi vista personalizada. Esto hizo que fuera muy simple agregar la función "recargar en rotación". Aquí está el código que utilicé, más detalles en la respuesta vinculado:
// 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()
}
sólo quiero señalar dos cosas:
self.htmlText
es una variable que contiene el texto HTML quiero cargar que yo añadido a mi vista personalizada
- el uso de
UIDevice.current.endGeneratingDeviceOrientationNotifications()
era adecuada para mi situación, puede que no sea el suyo para
eso es todo, aplausos
Ver http: // stackoverflow.com/questions/6007904/uiwebview-donest-resize-correct-when-orientation-change – buley