Haga zoom en una UIWebView como la aplicación de correo de iOS

Me gustaría recrear una vista en la que pueda hacer zoom como la aplicación Mail de iPhone/iPad o Sparrow cuando ve un correo electrónico, donde en la parte superior hay un bloque de información y luego una UIWebView. Obviamente, puedo hacer esto fácilmente en el generador de interfaz o en el código, PERO me gustaría que se comporte como la aplicación de Correo.

Por "me gusta la aplicación de correo" quiero decir que cuando pellizca el zoom (en cualquier lugar de la vista), UIWebView es la única vista que realmente hace zoom, y el contenido superior permanece del mismo tamaño. Cuando se aleja demasiado y ve el fondo, toda la vista se aleja (no solo la UIWebview) y toda la vista también se desplaza.

Ya experimenté un poco y probé algunas de las sugerencias, como insertar la vista superior en la parte superior de UIWebView, extender la altura de UIWebView según el tamaño del contenido, pero esto siempre termina con la vista superior haciendo zoom también, O solo el UIWebView.

Espero que tenga algún sentido. Puede ser muy simple, pero he estado tratando de resolver esto de vez en cuando y ya no puedo ver el bosque para los árboles.

Esto es para una aplicación MonoTouch, pero si alguien tiene ejemplos de Objective-C o algo, puedo convertirlo y publicarlo.

preguntado el 03 de mayo de 12 a las 16:05

Cualquier posibilidad de que puedas subclasificar MFMailComposeViewController para hacer lo que necesitas? Esto está integrado para enviar correos electrónicos. -

1 Respuestas

He hecho exactamente eso para nuestra aplicación; no es tan simple como parece, pero en iOS 5 debería ser un poco menos complejo que iOS 4. Tenga una vista de la parte superior que desea tener constante. Cuando su vista web termine de cargar el HTML y lo represente, consigue el scrollView de la vista web y agregue su vista como una subvista a eso. Agregue la altura del marco de la vista superior a la contentSize.height de la vista de desplazamiento y agregue la altura a origin.y del resto de subvistas de la vista de desplazamiento (las que no son su vista superior). Configure su controlador de vista como el delegado de la vista de desplazamiento de la vista web. Cada vez que el usuario se desplaza:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{   
    CGRect frame = contentView.frame;

    if(scrollView.contentOffset.x < 0)
    {
        frame.origin.x = 0;
    }
    else if((scrollView.contentOffset.x + contentView.frame.size.width) > scrollView.contentSize.width)
    {
        frame.origin.x = scrollView.contentSize.width - contentView.frame.size.width;
    }
    else
    {
        frame.origin.x = scrollView.contentOffset.x;
    }

    [contentView setFrame:frame];
}

Esto debería hacer que se comporte exactamente como la vista mail.app.

contestado el 05 de mayo de 12 a las 16:05

El segundo problema se puede solucionar manteniendo la vista en el lugar correcto en scrollView:didScroll:. El segundo problema se puede resolver agregando una tercera vista cuyo trabajo es mantener la parte inferior en blanco donde sea necesario. - leo natan

@LeoNatan: ¡Gracias por tu respuesta! Me has alegrado el día ! :) - Arkan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.