2013-08-31 22 views
9

Ich versuche, eine PDF in einer UIWebView mit dem gesamten Bildschirm des Geräts anzuzeigen, mit Ausnahme der Statusleiste und der oberen Leiste. Bisher habe ich IBOutlet UIWebview *webview; in meiner .h-Datei erstellt. Ich verbinden die Webansicht in meinem Drehbuch und schrieb den folgenden Code in meiner .m-Datei:UIWebview Vollbildgröße

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

} 

Der pdf-Displays richtig in meinem 3,5 Zoll, aber in meinem 4-Zoll-Display ist der Boden abgeschnitten. Dies macht sich umso mehr bemerkbar, wenn ich in die Landschaftsansicht rotiere. Ungefähr 33% des Bildschirms werden überhaupt nicht verwendet. Wie kann ich das beheben? Ich weiß, dass es etwas mit den UIWebview-Dimensionen in meinem obigen Code zu tun hat (webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];), aber gibt es eine bessere Möglichkeit, die Webansicht auf dem gesamten Bildschirm anzuzeigen, ohne eine bestimmte Bildschirmhöhe und -breite anzugeben?

Antwort

29

Eine billige Sache zu tun wäre, um den Rahmen der Webansicht setzen in zwingenden - ist (void) viewDidLayoutSubviews

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

der Vorteil, es hier zu tun, dass die Größe und die Ausrichtung der Ansicht bereits wurde hier bestimmt, und Sie können eine genaue Messung erhalten.

+0

ich diesen Code hinzugefügt, aber es ist ein Fehler: „Zuordnung zu 'CGRect' (auch bekannt als 'struct CGRect') von nicht kompatiblen Typ 'int' ... –

+1

ich gerade tat - (void) viewDidLoad { [super viewDidLoad]; \t webview = [[UIWebView alloc] initWithFrame: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)] und jetzt funktioniert es! Danke! –

+0

Falls jemand sich wunderte, der Grund, warum es funktionierte, ist, weil Sie CGRectmake zu CGRectMake korrigierten, nicht weil es zu initWithFrame geändert wurde. –

2

Nach vielen Kopfschmerzen mit der Kompatibilität von iOS6, 7 und unterschiedlichen Bildschirmgrößen zu tun, verwende ich diese:

- (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

Wenn Sie die View-Eigenschaft des Controllers ersetzen, können Sie verhindern, dass sie überhaupt erstellt wird, indem Sie self.view in der loadView-Methode zuweisen. – radiospiel

10

Auto-Layout Mit

sicher sein, um den "Margen Constrain" Option nicht aktiviert ist, werden alle einschränken Werte sind 0:

enter image description here

Und Ihre wir bview ist ein erstes Kind Ihrer Hauptansicht:

enter image description here

Ohne Auto Layout

ändern webview autosizing Verbindungen:

enter image description here

0

konnte ich diese Arbeit bekommen richtig für mich, indem Sie die Reset to Suggested Constraints unter dem Resolve Auto Layout Issues Menü auswählen. enter image description here