2013-08-31 6 views
9

Próbuję wyświetlić plik PDF w interfejsie użytkownika interfejsu użytkownika, korzystając z całego ekranu urządzenia, z wyjątkiem paska stanu i paska górnego. Do tej pory utworzyłem IBOutlet UIWebview *webview; w moim pliku .h. Podłączyłem webview w moim ujęć i napisał następujący kod w moim pliku .m:UIWebview Pełny rozmiar ekranu

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

} 

PDF wyświetla prawidłowo w moim 3,5 cala, ale w moim 4-calowy wyświetlacz, dno jest odcięta. Jest to jeszcze bardziej zauważalne, gdy obracam do widoku poziomego. Około 33% ekranu nie jest w ogóle używane. Jak mogę to naprawić? Wiem, że to musi mieć coś wspólnego z wymiarami UIWebview w powyższym kodzie (webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];), ale czy istnieje lepszy sposób na proste wyświetlenie widoku na całym ekranie bez określania wysokości i szerokości ekranu?

Odpowiedz

29

Jeden tani rozwiązaniem byłoby, aby ustawić klatkę WebView w nadrzędnymi - (void) viewDidLayoutSubviews

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

Zaletą robi to tutaj jest to, że rozmiar i orientacja widoku ma już zostały określone tutaj i można uzyskać dokładny pomiar.

+0

dodałem ten kod, ale jest błąd: „Przypisywanie do 'CGRect' (aka 'struct CGRect') od niezgodnych typu 'int' ... –

+1

właśnie zrobił - (void) { viewDidLoad [super viewDidLoad]; \t webview = [[alokacja UIWebView] initWithFrame: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)], a teraz działa! Dziękujemy! –

+0

Jeśli ktoś się zastanawiał, powodem jego działania jest poprawienie CGRectmake do CGRectMake, a nie dlatego, że zmieniono go na initWithFrame. –

2

Po wielu głowy czynienia zgodności iOS6, 7 i różnych rozmiarów ekranu, używam tego:

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

Podczas zastępowania właściwości widoku kontrolera, można uniemożliwić jego utworzenie w pierwszej kolejności poprzez przypisanie self.view w metodzie loadView. – radiospiel

10

Korzystanie Auto Layout

Upewnij się, że "Ograniczenie na marginesie" opcja nie jest zaznaczona, wszystkie ograniczyć wartości to 0:

enter image description here

i twój my BView jest pierwszym dzieckiem głównym widoku:

enter image description here

bez przyłączy Auto-układ

Zmień Webview autosizing:

enter image description here

0

udało mi się uzyskać to działa poprawnie dla mnie, wybierając Reset to Suggested Constraints pod menu. enter image description here