2013-08-31 6 views
9

J'essaye d'afficher un pdf dans un UIWebview utilisant l'écran entier de l'appareil, excepté la barre d'état et la barre supérieure. Jusqu'à présent, j'ai créé IBOutlet UIWebview *webview; dans mon fichier .h. Je me suis connecté WebView dans mon story-board et écrit le code suivant dans mon fichier .m:UIWebview plein écran taille

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 

    webview.scalesPageToFit = YES; 
    webview.autoresizesSubviews = YES; 
    webview.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); 
    [webview setBackgroundColor:[UIColor clearColor]]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Chart" ofType:@"pdf"]; 
    NSURL *targetURL = [NSURL fileURLWithPath:path]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; 
    [webview loadRequest:request]; 

    [self.view addSubview:webview]; 

} 

Le PDF se affiche correctement dans mon 3,5 pouces, mais à mon écran 4 pouces, le fond est coupé. C'est encore plus perceptible lorsque je fais pivoter en vue paysage. Environ 33% de l'écran n'est pas utilisé du tout. Comment puis-je réparer cela? Je sais que cela doit avoir quelque chose à voir avec les dimensions de UIWebview dans mon code ci-dessus (webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];), mais y a-t-il un meilleur moyen d'afficher simplement le webview sur tout l'écran sans spécifier une hauteur et une largeur d'écran spécifique?

Répondre

29

Une chose pas cher à faire serait de définir le cadre de la WebView en remplaçant - (void) viewDidLayoutSubviews

- (void)viewDidLayoutSubviews { 
    webView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
} 

l'avantage de le faire ici, est que la taille et l'orientation de la vue a déjà été déterminé ici, et vous pouvez obtenir une mesure précise.

+0

J'ajouté ce code, mais il y a une erreur: « Attribution de 'CGRect' (alias 'struct CGRect') de type incompatible 'int' ... –

+1

Je viens de - (void) viewDidLoad { [super viewDidLoad]; \t webview = [[UIWebView alloc] initWithFrame: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)] et maintenant ça marche! –

+0

Dans le cas où quelqu'un se demandait, la raison pour laquelle cela a fonctionné est que vous avez corrigé CGRectmake à CGRectMake, pas parce qu'il a été changé en initWithFrame –

2

Après beaucoup de maux de tête face à la compatibilité des iOS6, 7 et différentes tailles d'écran, j'utilise celui-ci:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.webview = [[UIWebView alloc] init]; 
    // More setting your webview here 

    // Set webview to full screen 
    self.view = self.webview; 

    [self.webview loadRequest:aRequest]; 
} 
+1

Lorsque vous remplacez la propriété view du contrôleur, vous pouvez l'empêcher d'être créé en premier en affectant self.view dans la méthode loadView. – radiospiel

10

En utilisant la mise en page automatique

Assurez-vous que le « Contraindre marges » option n'est pas cochée, les valeurs sont contraignent 0:

enter image description here

Et votre nous BView est un premier enfant de votre point de vue principal:

enter image description here

Sans mise en page automatique

Modifier les connexions WebView:

enter image description here

0

J'ai pu obtenir ce travail correctement pour moi en sélectionnant le Reset to Suggested Constraints sous le menu Resolve Auto Layout Issues. enter image description here