UIWebView con altura inferior a 101px no seleccionable?

Estoy trabajando en una aplicación que carga pequeños trozos de HTML en varias visiones web. Quiero que este HTML sea seleccionable por el usuario, para que puedan copyr y pegar partes de él. Esto funciona perfectamente, pero solo cuando el contenido es mayor a 100px alto. Por alguna razón, si es más corto, el usuario no puede seleccionar el contenido.

Pasos para reproducir:

  1. Cree una UIWebView con un ancho de 322 y una altura de 100 y agréguelo a una vista
  2. Llame loadHTMLString: "W " * 64, baseURL: nil en la vista web. (en mi pantalla se trata de 4 filas completas de "W" s)
  3. Haga clic y mantenga presionado en una de las "W", tenga en count que el menu copyr / pegar no aparece
  4. Llame loadHTMLString: "W " * 65, baseURL: nil en la vista web. (en mi pantalla, la última "W" está en la 5ª fila)
  5. Haga clic y mantenga presionado en una de las "W", tenga en count que el menu copyr / pegar aparece

He intentado varias cosas, para entender lo que está sucediendo aquí. Sigo los mismos pasos, pero comienzo con una altura de 101 en lugar de 100, funciona perfectamente con solo 4 filas.

Creo que esto podría ser un error en iOS? ¿Tal vez?

Estoy ejecutando iOS 9.2 , con Xcode 7.2.1

¿Alguien aquí sabe por qué esto podría estar sucediendo, o si hay algún tipo de trabajo que pueda usar para solucionar esto?

He intentado algunas soluciones, en vano.

La única solución que encontré: use WKWebView : no tiene este problema.

Actualmente, a partir de iOS 9, no puede agregar WKWebView través de Interface Builder. Esto se debe a que no es compatible. No podrá includelo en IB, siempre que el encabezado de WKWebView declare como NS_UNAVAILABLE :

 - (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; 

En su lugar, puede declararlo como una propiedad e instanciarlo en su implementación viewDidLoad , así:

 self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 200, 320, 100)]; 

Bueno, webview supone cargar código html, pero no cadena pura, que podría confundirlo. Si agrega <!DOCTYPE HTML> al frente, puede seleccionarse sin importar cuán corta sea la cadena.

Configurar scalesPageToFit a true para la vista web parece resolver el problema pero solo si la altura es 100. Si es 99 o less, el mismo problema persiste. Pero es extraño ver la relación entre scalesPageToFit y esta característica y para una altura de 100. Mirando las alturas de 101,100,99 parece que se está produciendo algún tipo de problema de cálculo de punto flotante aquí. Definitivamente un error

Después de más investigación encontré que si se establece la altura a 100.5 entonces el contenido es seleccionable. Parece una especie de networkingondeo de problemas en la implementación de la vista web.

Cuando miré el contenido de la vista de desplazamiento de la vista web, parece que cuando el contenido de scrollview va más allá de 100, la selección funciona. Por lo tanto, si maneja webviewDidFinishLoad y allí comtesting si contentSize es <100, puede volver a cargar la cadena agregando <br> . Siempre y cuando sea menor a 100, continúe cargando agregando un <br> cada vez a la cadena cargada. Esto debería funcionar para ti.

 func webViewDidFinishLoad(webView: UIWebView) { print(webview.scrollView.contentSize) var content = webview.stringByEvaluatingJavaScriptFromString("document.body.innerHTML") if content != nil && webview.scrollView.contentSize.height <= 100 { content! += "<br>" webview.loadHTMLString(content!, baseURL: nil) } }