Question

Je simple UIViewController avec juste un UIWebView. Le UIWebView devrait prendre tout l'espace disponible pour afficher le contenu d'une URL.

Je voudrais utiliser ce ViewController dans divers endroits. Dans certains cas, il sera poussé dans un NavigationController, dans certains, il sera affiché comme ModalViewController. Parfois, il est peut-être dans un TabBarController. La taille du UIWebView varie d'un cas à l'autre.

Quelle est la meilleure façon de définir le cadre de la UIWebView sans utiliser l'Interface Builder? En d'autres termes, comment dois-je initialiser webViewFrame dans le code suivant? Ou est-il autre chose que je suis absent?

- (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];
}

Je l'ai essayé avec des possibilités différentes (self.view.frame, self.navigationController.view.frame, etc.), mais rien ne semble fonctionner pour tous les cas.

Était-ce utile?

La solution

Si vous n'êtes pas en utilisant un NIB alors qu'est-ce que votre méthode de -loadView ressembler? Il devrait ressembler à ceci:

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

Dans ce cas, la trame initiale est hors de propos. Le UIViewController prendra soin de calibrage correctement votre point de vue.

Cependant, si vous voulez réellement insérer une vue Web (ou tout autre point de vue) en vue de parent, vous utilisez autoresizeMask pour contrôler la façon dont votre vue redimensionne avec son parent.

Par exemple:

    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];

Dans ce cas, le cadre initial de la WebView par rapport aux limites du parentView.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top