2013-04-05 23 views
7

Próbowałem każdej permutacji znanej ludzkości i nie mogę poprawnie uzyskać rozmiaru UIWebView w widoku formularza modalnego dla iPada. Strona wciąż wyświetla pełną szerokość portretu iPada 768 punktów.Jak rozmiar UIWebView w UIModalPresentationFormSheet?

Gdzie i jak powiedzieć UIWebView, aby wyświetlić szerokość 540 punktów?

Myślałem, że "scalesPageToFit" ma to zrobić, ale to nie działa.

Próbowałem ustawić widok internetowy na rozmiar widoku formularza, który wynosi 540 x 576 z nawigacją i paskiem stanu. Wysokość jest jednak nieistotna.

Próbowałem dodać UIWebView do UIView w storyboardie z wszystkimi ustawieniami zmiany rozmiaru. Następnie usunąłem UIWebView i dodałem go programowo.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect aFrame = self.view.frame; 

    if (IS_IPAD) 
    { 
     aFrame = CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT); 
    } 

    _webView = [[UIWebView alloc] initWithFrame:aFrame]; 
    [_webView setOpaque:NO]; 
    [_webView setDelegate:self]; 
    [_webView setScalesPageToFit:YES]; 

    self.view = _webView; 
    ... 
} 

Próbowałem też załadunku viewDidAppear (oprócz viewDidLoad, viewWillAppear itp)

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [[self webView] setFrame:CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT)]; 
    [[self webView] setScalesPageToFit:YES]; 

    NSURL *webURL = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f]; 
    [[self webView] loadRequest:request]; 
} 

żadnych rekomendacji doceniane.

enter image description here

Odpowiedz

3

Utrzymuje się ze mną dzieje. Zamieszczam długie pytanie, a dwie sekundy później znajduję odpowiedź.

Zresztą ktoś pisał rozwiązanie tego problemu tutaj: UIWebView -- load external website, programmatically set initial zoom scale, and allow user to zoom afterwards

Ja jednak zmieniony skrypt ustawić szerokość do szerokości iPad:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString* js = 
    @"var meta = document.createElement('meta'); " 
    @"meta.setAttribute('name', 'viewport'); " 
    @"meta.setAttribute('content', 'width = 540px, initial-scale = 1.0, user-scalable = yes'); " 
    @"document.getElementsByTagName('head')[0].appendChild(meta)"; 

    [[self webView] stringByEvaluatingJavaScriptFromString: js]; 
} 

Note część „width = 540px , początkowa skala = 1,0, skalowalna przez użytkownika = tak "

Zmieniłem szerokość na szerokość i skalę formularza na 1,0.

Potrzebuję również obsługi iPhone'a, więc dokonam korekty w następnej kolejności. Myślę, że ta poprawka może być potrzebna tylko dla widoku formularza iPada.

AKTUALIZACJA: Odpowiedź jest krótkotrwała. Jeśli załaduję dowolną inną stronę, wielkość zostanie ponownie odrzucona. Powrót do pierwszego kwadratu.

ROZWIĄZANIE: Ten widok będzie wymagać dostępu tylko do kilku opracowanych przeze mnie stron internetowych. Dlatego zaktualizowałem kilka stron internetowych, do których muszę uzyskać dostęp, dodając metatag do każdego z nich. Potrzebuję tylko dostępu do tych stron, więc jest to rozwiązanie, które zamierzam zastosować. Oznacza to, że muszę jakoś ustawić szerokość widoku do 540 pikseli tylko dla iPada. Wymyślę to dalej.

<meta name="viewport" content="width:540, initial-scale=1, maximum-scale=1"> 
+0

Moja obecna implementacja jest to, że napisałem skrypt Pythona do analizowania i generowania stron docelowych, od strony źródeł jak help_ipad.html które są dostępne w widoku formularza na iPada. – Christopher

+0

Warto zwrócić uwagę na jeden punkt: jeśli nie wyczyścisz okna, które znalazłem podczas obracania aplikacji, utracisz zastosowane atrybuty. Możesz wyczyścić widok, uruchamiając ten skrypt w pierwszej kolejności: [webView stringByEvaluatingJavaScriptFromString: @ "$ ('meta [name = viewport]'). Remove();"]; – Vlad