Tengo una simple UIViewController con sólo un UIWebView. El UIWebView debe tomar todo el espacio disponible para mostrar el contenido de una url.

Me gustaría volver a este ViewController en varios lugares. En algunos casos será empujado a una NavigationController, en algunos se mostrará como un ModalViewController. A veces puede ser dentro de un TabBarController. El tamaño de la UIWebView variará de un caso a otro.

¿Cuál es la mejor manera de establecer el marco de la UIWebView sin utilizar el Constructor de interfaces? En otras palabras, ¿cómo debo inicializar webViewFrame en el siguiente código? O es que hay algo que me falta?

- (void)viewDidLoad {
    [super viewDidLoad];
    UIWebView* webView = [[UIWebView alloc] initWithFrame:webViewFrame];
    webView.delegate = self;
    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    [webView loadRequest:request];
    [self.view addSubview:webView];
    [webView release];
}

He probado con diferentes posibilidades (auto.vista.marco, yo.navigationController.vista.marco, etc.), pero nada parece funcionar para todos los casos.

OriginalEl autor hpique | 2009-12-02

1 Comentario

  1. 8

    Si no estás usando una PUNTA a continuación, ¿qué su -loadView método? Se debe tener este aspecto:

    - (void)loadView
    {
        UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        webView.delegate = self;
        self.view = webView
        [webView release];
    }

    En este caso, el marco inicial es irrelevante. El UIViewController se encargará de cambiar el tamaño de la vista correctamente.

    Sin embargo, si usted realmente desea insertar una vista web (o cualquier otro punto de vista) en una vista principal, utilice autoresizeMask para controlar cómo su vista se redimensiona con su padre.

    Por ejemplo:

        UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
        parentView.autoresizesSubviews = YES;
    
        UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    
        [parentView addSubview:webView];
        self.view = parentView;
        [parentView release];

    En este caso, el webView del marco inicial es relativa a la parentView límites.

    Gracias por la rápida respuesta, Darren. Ambas opciones resolver la cuestión. Sin embargo, hay algo que no entiendo. Por qué no puedo usar el auto.vista.marco como webViewFrame en mi ejemplo de código? No debería ser.vista.marco tiene el tamaño correcto en viewDidLoad?
    auto.la vista se cambia después de viewDidLoad. De hecho, se puede cambiar en cualquier momento por una serie de razones (por ejemplo, la llamada de progreso en la barra de título). Por lo tanto, siempre debe configurar su autoresizingMask por lo que su sub-vistas se cambia correctamente.
    Interesante. Así que no hay realmente ninguna manera de saber la trama real del auto.ver en viewDidLoad, entonces?
    Parece que el cambio de tamaño se ha producido una vez -(void)viewDidLayoutSubviews se llama.

    OriginalEl autor Darren

Dejar respuesta

Please enter your comment!
Please enter your name here