2012-05-03 21 views
14

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

Con 'Me gusta la aplicación de correo' Quiero decir, cuando pellizcas 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 aleja demasiado y ve el fondo, la vista completa se aleja (no solo UIWebview) y la vista completa se desplaza también.

He hecho algunas pruebas e intenté 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 También puede hacer zoom, O solo UIWebView.

Espero que tenga sentido. Puede ser realmente simple, pero he estado tratando de ordenar esto por un tiempo, ya no puedo ver la madera para los árboles.

Esto es para una aplicación MonoTouch, pero si alguien tiene ejemplos de Objective-C o algo que pueda convertir y publicar de nuevo.

+0

¿Existe la posibilidad de que la subclase 'MFMailComposeViewController' haga lo que necesita? Esto está incorporado para enviar correos electrónicos. – jonathanpeppers

Respuesta

7

He hecho justamente eso para nuestra aplicación; no es tan simple como parece, pero en iOS 5 debería ser algo 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 muestre, obtenga el scrollView de la vista web y agregue su vista como una subvista a eso. Agregue la altura del marco de la vista superior al contentSize.height de la vista de desplazamiento, y agregue la altura a origin.y del resto de las 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.

+0

El segundo problema que puede resolver es mantener su 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 blanca donde sea necesario. –

+0

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

+0

¡Salud, gracias! –